我是火花流的新手。我正在尝试从kafka提取数据并与hive table结合进行一些练习。我不确定如何在Spark Streaming(不是结构化流)中进行JOIN。这是我的代码
{{1}}
现在我想加入蜂巢中的一张桌子。在Spark结构化流中,我可以直接调用spark.table(“ table nanme”)并进行一些联接,但是在Spark流中,由于其所有内容均基于RDD,因此我该怎么办呢?有人可以帮我吗?
答案 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