Spark机器学习管道 - Transformer

本文详细介绍了如何使用Spark MLlib中的Transformer进行特征工程,包括Binarizer、Bucketizer、OneHotEncoder、Tokenizer、StopWordsRemover、HashingTF和VectorAssembler的使用,展示了它们在转换DataFrame数据、处理分类和文本数据等方面的作用。
摘要由CSDN通过智能技术生成

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计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")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不懂开发的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值