第 18 章 DStream 编程进阶
18.1 累加器和广播变量
和RDD
中的累加器和广播变量的用法完全一样. RDD
中怎么用, 这里就怎么用.
18.2 DataFrame ans SQL Operations
你可以很容易地在流数据上使用 DataFrames
和SQL。你必须使用SparkContext
来创建StreamingContext
要用的SQLContext
。
此外,这一过程可以在驱动失效后重启。我们通过创建一个实例化的SQLContext
单实例来实现这个工作。如下例所示。我们对前例word count
进行修改从而使用DataFrames
和 SQL 来产生 word counts 。每个 RDD 被转换为 DataFrame,以临时表格配置并用 SQL 进行查询。
val spark = SparkSession.builder.config(conf).getOrCreate()
import spark.implicits._
count.foreachRDD(rdd =>{
val df: DataFrame = rdd.toDF("word", "count")
df.createOrReplaceTempView("words")
spark.sql("select * from words").show
})
18.3 Caching / Persistence
和 RDDs 类似,DStreams 同样允许开发者将流数据保存在内存中。也就是说,在DStream 上使用 persist()
方法将会自动把DStreams
中的每个RDD
保存在内存中。
当DStream
中的数据要被多次计算时,这个非常有用(如在同样数据上的多次操作)。对于像reduceByWindow
和reduceByKeyAndWindow
以及基于状态的(updateStateByKey)
这种操作,保存是隐含默认的。
因此,即使开发者没有调用persist()
,由基于窗操作产生的DStreams
会自动保存在内存中。