在Spark Streaming上使用Spark Mllib的思路实现
来源:互联网 发布:linux网速测试命令 编辑:程序博客网 时间:2024/06/05 19:24
在Spark Streaming中,数据抽象是DStream(离散数据流)。底层是靠封装RDD实现,而Spark Mllib是早期的机器学习库,主要也是基于RDD抽象数据集实现的算法。因此在Spark Streaming上想要使用Spark Mllib首先就要获取到DStream对应的RDD,而DStream中可以获取到RDD的方法有如下:
def foreachRDD(foreachFunc: (RDD[T], Time) => Unit,displayInnerRDDOps: Boolean): Unitdef transform[U: ClassTag](transformFunc: RDD[T] => RDD[U]): DStream[U]def transformWith[U: ClassTag, V: ClassTag](other: DStream[U], transformFunc: (RDD[T], RDD[U]) => RDD[V]): DStream[V]具体方法实现参考源码,观察方法签名我们可以得知foreachRDD是不可以的,因为foreachRDD返回值类型Unit,获取不到结果(但是通过在foreachRDD方法中实现预测结果输出外部存储的话,也是可以实现的)。所以方便实现的就是transform算子,需要一个RDD=>RDD的函数,我们就可以将这个函数定义为预测函数,然后传入(识别模型我们可以通过在加载方式加载离线模型)
具体实现伪代码如下:
import org.apache.spark.rdd.RDDimport org.apache.spark.streaming.{Seconds, StreamingContext}import org.apache.spark.{SparkContext, SparkConf}/** * Created by Daxin on 2017/8/9. * 本程序主要想要说明如何在Spark Streaming上使用Spark Mllib */object SparkStreamingMl { def main(args: Array[String]) { val conf = new SparkConf() conf.setAppName("socketStream") //基于Reciver模式,所以线程数目需要大于1,否则只能接受数据无法处理数据 conf.setMaster("local[*]") //如果设置conf.setMaster("local[1]")的话,将会没有线程负责计算 val sc = new SparkContext(conf) sc.setLogLevel("ERROR") val ssc = new StreamingContext(sc, Seconds(2)) ssc.checkpoint("") //TODO 最终创建一个SocketInputDStream返回 val line = ssc.socketTextStream("node", 9999) /** * 模拟识别的预测逻辑 * * @param rdd * @tparam T * @return */ def predict[T](rdd: RDD[T]): RDD[T] = { //省略预测的逻辑 rdd } /** * 直接定义函数 */ val predictFunc = (rdd: RDD[String]) => { rdd } val func = predict[String] _ //方法转函数,此处主要想复习一下Scala知识点 line.transform(func(_)).print() ssc.start() ssc.awaitTermination() }}
/** * Allows the execution of relational queries, including those expressed in SQL using Spark. * * @groupname dataType Data types * @groupdesc Spark SQL data types. * @groupprio dataType -3 * @groupname field Field * @groupprio field -2 * @groupname row Row * @groupprio row -1 */package object sql { /** * Converts a logical plan into zero or more SparkPlans. This API is exposed for experimenting * with the query planner and is not designed to be stable across spark releases. Developers * writing libraries should instead consider using the stable APIs provided in * [[org.apache.spark.sql.sources]] */ @DeveloperApi @InterfaceStability.Unstable type Strategy = SparkStrategy type DataFrame = Dataset[Row]}
阅读全文
0 0
- 在Spark Streaming上使用Spark Mllib的思路实现
- 基于Spark Streaming和Spark MLlib实现文本情感分析
- 在Kaggle手写数字数据集上使用Spark MLlib的RandomForest进行手写数字识别
- Spark Streaming 实现思路与模块概述
- Spark Streaming 实现思路与模块概述
- Spark Streaming 实现思路与模块概述
- Spark Streaming 实现思路与模块概述
- Spark Streaming 实现思路与模块概述
- ALS 在 Spark MLlib 中的实现
- ALS 在 Spark MLlib 中的实现
- spark流数据处理:Spark Streaming的使用
- spark流数据处理:Spark Streaming的使用
- spark-streaming系列------- 1. spark-streaming的Job调度 上
- spark-mllib-TFIDF实现
- spark mllib 相关使用
- Spark 非mllib实现的kmeans详解
- Naive Bayes - spark.mllib的实现
- 在Kaggle手写数字数据集上使用Spark MLlib的朴素贝叶斯模型进行手写数字识别
- 从共享征信黑名单开始:LinkEye想打造基于区块链的征信联盟
- MyEclipse使用总结——MyEclipse10安装SVN插件(转)
- HideInInspector SerializeField
- java上转型对象分析
- Android开发中在一个Activity中关闭另一个Activity
- 在Spark Streaming上使用Spark Mllib的思路实现
- Java Object类详解
- Linux多线程编程的高效开发
- 七大程序员必备的网站推荐
- Stockbroker Grapevine--(Floyed-Warshall)
- hive size计算数组长度的一个坑
- 汇编语言程序设计读书笔记(4)- 程序设计基础之一
- STM32 flash 读写操作
- javascript实现ie6兼容position:fixed