Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark结构化流式连接不工作_Apache Spark_Apache Kafka - Fatal编程技术网

Apache spark Spark结构化流式连接不工作

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

我是Spark结构化流媒体的新手,我正在尝试将来自Kafka主题(Spark 2.3.2,Kafka 2.0)的多个流连接在一起

连接在流上工作得很好,我可以在关键点上进行简单的等连接。在两个主题的一个特定连接上,我必须进行一些数据转换,因为在一个主题上,连接键用十六进制编码,而在另一个主题上,连接键用base64编码

经过大量调试,我得到了下面的代码,我正在PySpark齐柏林飞艇笔记本上测试。这两个主题流存储在Python dict中

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=是正确的