Apache spark Spark结构化流式连接不工作
我是Spark结构化流媒体的新手,我正在尝试将来自Kafka主题(Spark 2.3.2,Kafka 2.0)的多个流连接在一起 连接在流上工作得很好,我可以在关键点上进行简单的等连接。在两个主题的一个特定连接上,我必须进行一些数据转换,因为在一个主题上,连接键用十六进制编码,而在另一个主题上,连接键用base64编码 经过大量调试,我得到了下面的代码,我正在PySpark齐柏林飞艇笔记本上测试。这两个主题流存储在Python dict中Apache spark Spark结构化流式连接不工作,apache-spark,apache-kafka,Apache Spark,Apache Kafka,我是Spark结构化流媒体的新手,我正在尝试将来自Kafka主题(Spark 2.3.2,Kafka 2.0)的多个流连接在一起 连接在流上工作得很好,我可以在关键点上进行简单的等连接。在两个主题的一个特定连接上,我必须进行一些数据转换,因为在一个主题上,连接键用十六进制编码,而在另一个主题上,连接键用base64编码 经过大量调试,我得到了下面的代码,我正在PySpark齐柏林飞艇笔记本上测试。这两个主题流存储在Python dict中 debug = (topicStreams['invpr
debug = (topicStreams['invprop']
.where("invpropv.PHC_UID_IPID = '183C1BA9B3444919B6C33DAB0B639A87'")
.writeStream.outputMode("append").format("memory")
.queryName("debug").start()
)
正如我所期望的,这只返回第一个主题的一条消息
debug2 = (topicStreams['hca']
.where("hex(unbase64(hcav.id)) = '183C1BA9B3444919B6C33DAB0B639A87'")
.writeStream.....
第二个流还返回一条消息,这当然是我试图加入的两条消息。我想我可以假设钥匙确实匹配
debug3 = (topicStreams['invprop']
.join(topicStreams['hca'],
expr("invpropv.PHC_UID_IPID = hex(unbase64(hcav.id))"))
.writeStream...
此联接从不返回任何内容。什么会导致此联接失败?我想我一定忽略了一些基本的东西。我对Pyspark不太熟悉,但我可以看到在Python中,比较运算符是
=
,而不是=
,就像在您的代码中一样。请重新检查
=
操作员在expr()
函数中所做的操作。与往常一样,编写堆栈溢出问题总能提供答案。这一次,以一种出乎意料的方式
键入上面的问题花了我几分钟的时间,然后我又检查了我的齐柏林飞艇笔记本。瞧,我现在得到了我一直在寻找的单曲唱片
连接的速度非常慢,但它可以工作——它花了5分钟才产生结果。我从来没有等过很久。不,主题不是太大,只包含了成千上万条信息中的10条
好吧,现在我知道连接基本上是有效的。我必须找出它为什么这么慢,以及如何加快速度。谢谢你的回答。expr()中的代码实际上是Spark SQL代码,因此这里的single=是正确的