如何在Spark Streaming上对来自Kafka的流数据进行JOIN

时间:2019-02-01 14:20:58

标签: apache-spark spark-streaming

我是火花流的新手。我正在尝试从kafka提取数据并与hive table结合进行一些练习。我不确定如何在Spark Streaming(不是结构化流)中进行JOIN。这是我的代码

{{1}}

现在我想加入蜂巢中的一张桌子。在Spark结构化流中,我可以直接调用spark.table(“ table nanme”)并进行一些联接,但是在Spark流中,由于其所有内容均基于RDD,因此我该怎么办呢?有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您需要转换

这样的事情是必需的:

val dataset: RDD[String, String] = ... // From Hive
val windowedStream = stream.window(Seconds(20))... // From dStream
val joinedStream = windowedStream.transform { rdd => rdd.join(dataset) }

从手册中:

  

转换操作(及其类似transformWith的变体)   允许将任意RDD-to-RDD函数应用于DStream。它   可用于应用未在   DStream API。例如,加入每个批次的功能   具有另一个数据集的数据流不会直接暴露在   DStream API。但是,您可以轻松地使用transform来执行此操作。这个   带来非常强大的可能性。

可以在这里找到一个示例: How to join a DStream with a non-stream file?

以下指南会有所帮助:https://spark.apache.org/docs/2.2.0/streaming-programming-guide.html