Spark机器学习管道 - Transformer
- 一、实验目的
- 二、实验内容
- 三、实验原理
- 四、实验环境
- 五、实验步骤
-
- 5.1 启动Spark集群和Zeppelin服务器
- 5.2 使用Binarizer transformer将temperature列值转换到两个桶
- 5.3 使用Bucketizer transformer将温度列放入三个桶中,输出按温度列排序。
- 5.4 使用OneHotEncoder transformer将序数值转换为分类值。
- 5.5 使用Tokenizer Transformer执行分词任务。
- 5.6 使用StopWordsRemover transformer来删除英语停止词。
- 5.7 使用HashingTF transformer将单词转换为数字表示。
- 5.8 使用VectorAssembler transformer来组合特征到一个特征向量。
- 结束语
⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计7939字,阅读大概需要10分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
⏰个人网站:https://jerry-jy.co/❗❗❗知识付费,🈲止白嫖,有需要请后台私信或【文末】个人微信公众号联系我
Spark机器学习管道 - Transformer
一、实验目的
掌握Spark机器学习管道中常用Transformer的使用。
二、实验内容
1、应用Binarizer transformer,将连续值变量转换为两个离散的值。
2、使用Bucketizer transformer将温度列放入三个桶中,输出按温度列排序。
3、使用OneHotEncoder transformer将序数值转换为分类值。
4、使用Tokenizer Transformer执行分词任务。
5、使用StopWordsRemover transformer来删除英语停止词。
6、使用HashingTF transformer将单词转换为数字表示。
7、使用VectorAssembler transformer来组合特征到一个特征向量。
三、实验原理
Transformer是一个算法,用来将一个输入DataFrame转换到另一个DataFrame,并向其添加一个或多个特征。Transformers的设计目的是通过在特征工程步骤和模型评估步骤中操作一个或多个列来转换DataFrame中的数据。
Spark ML提供两种类型的transformers:特征transformer和机器学习模型。
一个feature transformer通过对输入数据集中的一个列应用转换来创建一个或多个新列,并返回一个附加了新列的新DataFrame。例如,如果输入数据集有一个包含句子的列,则可以使用feature transformer将句子拆分为单词,并创建一个新的列,该列将单词存储在数组中。
一个模型代表一个机器学习模型。它接受一个DataFrame作为输入,并输出带有每个输入特征向量的预测标签的新DataFrame。输入数据集必须具有包含特征向量的列。模型读取包含特征向量的列,为每个特征向量预测一个标签,并返回一个新的DataFrame,其中预测标签作为新列附加。
下图描述了transformer的工作模式,DF1中的阴影部分表示输入列,DF2的阴影部分表示输出列。
四、实验环境
硬件:x86_64 ubuntu 16.04服务器
软件:JDK 1.8,Spark-2.3.2,Hadoop-2.7.3,zeppelin-0.8.1
五、实验步骤
5.1 启动Spark集群和Zeppelin服务器
在终端窗口下,输入以下命令,分别启动Spark集群和Zeppelin服务器:
1. $ cd /opt/spark
2. $ ./sbin/start-all.sh
3. $ zeppelin-daemon.sh start
然后使用jps命令查看启动的进程,确保Spark集群和Zeppelin服务器已经正确启动。
2、创建notebook。启动浏览器,访问”http://localhost:9090“, 打开zeppelin notebook首页,点击”Create new note”链接,创建一个新的笔记本。如下图所示:
5.2 使用Binarizer transformer将temperature列值转换到两个桶
Binarizer transformer(二元转换器)简单地将输入列的值转换为两组。第一组包含小于或等于指定阈值的值,输出列中的值将为零。对于其他值,输出列中的值将是1。输入列必须是double类型或VectorUDT。
在zeppelin中输入以下代码:
1. // 使用Binarizer transformer将温度值转换到两个桶
2. import org.apache.spark.ml.feature.Binarizer
3.
4. // 构造原始数据集(DataFrame)
5. val arrival_data = spark.createDataFrame(
6. Seq(("SFO", "B737", 18, 95.1, "late"),
7. ("SEA", "A319", 5, 65.7, "ontime"),
8. ("LAX", "B747", 15, 31.5, "late"),
9. ("ATL", "A319", 14, 40.5, "late") ))
10. .toDF("origin", "model", "hour", "temperature", "arrival")