自定义开发Spark ML机器学习类 - 1

本文介绍了如何在Spark中自定义机器学习类,重点讲解了基于DataFrame的Transformer的实现,通过分析内置的Tokenizer类,展示了如何创建一个正则表达式提取的Transformer,并探讨了其在ML Pipeline中的应用。
摘要由CSDN通过智能技术生成

初窥门径

Spark的MLlib组件内置实现了很多常见的机器学习算法,包括数据抽取,分类,聚类,关联分析,协同过滤等等.
然鹅,内置的算法并不能满足我们所有的需求,所以我们还是经常需要自定义ML算法.

MLlib提供的API分为两类:
- 1.基于DataFrame的API,属于spark.ml包.
- 2.基于RDD的API, 属于spark.mllib包.

从Spark 2.0开始,Spark的API全面从RDD转向DataFrame,MLlib也是如此,官网原话如下:

Announcement: DataFrame-based API is primary API

The MLlib RDD-based API is now in maintenance mode.

所以本文将介绍基于DataFrame的自定义ml类编写方法.不涉及具体算法,只讲扩展ml类的方法.

略知一二

官方文档并没有介绍如何自定义ml类,所以只有从源码入手,看看源码里面是怎么实现的.

找一个最简单的内置算法入手,这个算法就是内置的分词器,Tokenizer.

Tokenizer只是简单的将文本以空白部分进行分割,只适合给英文进行分词,所以它的实现及其简短,源码如下:

package org.apache.spark.ml.feature

import org.apache.spark.annotation.Since
import org.apache.spark.ml.UnaryTransformer
import org.apache.spark.ml.param._
import org.apache.spark.ml.util._
import org.apache.spark.sql.types.{ArrayType, DataType, StringType}

/**
 * A tokenizer that converts the input string to lowercase and then splits it by white spaces.
 *
 * @see [[RegexTokenizer]]
 */
@Since("1.2.0")
class Tokenizer @Since("1.4.0") (@Since("1.4.0") override val uid: String)
  extends UnaryTransformer[String, Seq[String], Tokenizer] with DefaultParamsWritable {

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值