Spark Streaming官方文档翻译基本概念之sql与Mllib

余生颓废 提交于 2020-01-02 20:23:18

Spark Streaming官方文档翻译Spark Streaming总览
Spark Streaming官方文档翻译基本概念之初始化与Dstream
Spark Streaming官方文档翻译基本概念之输入数据流和接收器
Spark Streaming官方文档翻译基本概念之转换操作
Spark Streaming官方文档翻译基本概念之输出操作
Spark Streaming官方文档翻译基本概念之sql与Mllib
Spark Streaming官方文档基本概念之缓存与检查点
Spark Streaming官方文档翻译基本概念之累加器、广播变量和检查点
Spark Streaming官方文档翻译Spark Streaming应用之部署,升级,监控
Spark Streaming官方文档翻译Spark Streaming性能调优
Spark Streaming官方文档翻译Spark Streaming容错
Spark Streaming官方文档翻译Spark Streaming +Kafka 集成指南
Spark Streaming官方文档翻译Spark Streaming自定义接收器

基本概念

DataFrame和SQL操作(DataFrame and SQL Operations)

您可以轻松地在流数据上使用DataFrames和SQL操作。 您必须使用StreamingContext正在使用的SparkContext创建SparkSession。此外,这样做可以在驱动程序失败时重新启动。这是通过创建一个延迟实例化的SparkSession单例来实现的。如下面的例子所示。它修改了前面的字数统计示例,以使用DataFrames和SQL生成字数统计。每个RDD都被转换为一个DataFrame,注册为一个临时表,然后使用SQL进行查询。

val words: DStream[String] = ...

words.foreachRDD { rdd =>

  // Get the singleton instance of SparkSession
  val spark = SparkSession.builder.config(rdd.sparkContext.getConf).getOrCreate()
  import spark.implicits._

  // Convert RDD[String] to DataFrame
  val wordsDataFrame = rdd.toDF("word")

  // Create a temporary view
  wordsDataFrame.createOrReplaceTempView("words")

  // Do word count on DataFrame using SQL and print it
  val wordCountsDataFrame =
    spark.sql("select word, count(*) as total from words group by word")
  wordCountsDataFrame.show()
}

查看完整的源代码

您还可以执行SQL查询在不同线程(即与运行中的StreamingContext异步)的流数据上定义的表。必须确保您设置了StreamingContext来记住足够数量的流数据,以便查询可以运行。则,StreamingContext(它不知道任何异步SQL查询)将在查询完成之前删除旧的流数据。例如,如果您想要查询上一批数据,但是您的查询可能需要5分钟才能运行完成,那么可以调用streamingContext.remember(minutes(5))(在Scala中,或在其他语言中等效)。

参见{DataFrames和SQL](https://spark.apache.org/docs/latest/sql-programming-guide.html)指南以了解更多关于DataFrames的信息。

MLlib操作(MLlib Operations)

您还可以轻松使用MLlib提供的机器学习算法。首先,有流式机器学习算法(如流式线性回归流式KMeans等)可以同时学习流式数据,也可以将模型应用到流式数据上。除此之外,对于更大类别的机器学习算法,您可以离线学习一个算法模型(即使用历史数据),然后在线将该模型应用于流数据。有关更多细节,请参阅MLlib指南。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!