Apache spark 使用pyspark从apache kafka反序列化avro时为空列

Apache spark 使用pyspark从apache kafka反序列化avro时为空列,apache-spark,pyspark,apache-kafka,avro,confluent-schema-registry,Apache Spark,Pyspark,Apache Kafka,Avro,Confluent Schema Registry,我正在用卡夫卡、Spark和jupyter笔记本进行概念验证,我遇到了一个奇怪的问题。我正试着从卡夫卡到派斯帕克读阿夫罗的唱片。我正在使用confluent模式注册表来获取模式以反序列化avro消息。 在spark数据帧中反序列化avro消息后,结果列为空,没有任何错误。列应该包含数据,因为当转换为字符串时,一些avro字段是可读的 我还尝试在Scala的spark shell上实现它(没有jupyter) 我尝试了基于docker的spark以及spark的独立安装 我遵循本SO主题获取fro

我正在用卡夫卡、Spark和jupyter笔记本进行概念验证,我遇到了一个奇怪的问题。我正试着从卡夫卡到派斯帕克读阿夫罗的唱片。我正在使用confluent模式注册表来获取模式以反序列化avro消息。 在spark数据帧中反序列化avro消息后,结果列为空,没有任何错误。列应该包含数据,因为当转换为字符串时,一些avro字段是可读的

我还尝试在Scala的spark shell上实现它(没有jupyter) 我尝试了基于docker的spark以及spark的独立安装

我遵循本SO主题获取from_avro和to_avro函数:

值列的内容为空。我希望解码失败后会出现错误,或者数据会在那里。有人知道这可能是什么原因,或者如何调试它吗

+---+-----+
|key|value|
+---+-----+
|...| [[]]|
|...| [[]]|
|...| [[]]|
|...| [[]]|

您必须手动反序列化数据。在撰写本文时,PySpark还没有正式支持Confluent schema registry。您需要使用Confluent提供的KafkaAvroDeSerializer或第三方Spark avro库ABRiS

阿布里斯:

卡夫卡夫罗德列泽:

原因:Confluent在Avro数据旁边添加了5个额外字节,其中1个用于magic byte,4个用于schema ID,[magic byte | schema ID | Avro data],这不是典型的Avro格式。因此,您需要手动反序列化


(抱歉,我无法发表评论。)

您必须手动反序列化数据。在撰写本文时,PySpark还没有正式支持Confluent schema registry。您需要使用Confluent提供的KafkaAvroDeSerializer或第三方Spark avro库ABRiS

阿布里斯:

卡夫卡夫罗德列泽:

原因:Confluent在Avro数据旁边添加了5个额外字节,其中1个用于magic byte,4个用于schema ID,[magic byte | schema ID | Avro data],这不是典型的Avro格式。因此,您需要手动反序列化


(很抱歉,我无法发表评论。)

不幸的是,spark avro不支持Confluent的序列化程序写入数据的格式,因此它失败了(通过返回null/empty值)。请查看这是否有帮助。不幸的是,spark avro不支持Confluent的序列化程序写入数据的格式,因此它失败了(通过返回null/empty值)查看这是否有帮助
+---+-----+
|key|value|
+---+-----+
|...| [[]]|
|...| [[]]|
|...| [[]]|
|...| [[]]|