Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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 Streaming DataFrame中删除(损坏的)不符合模式的行(来自Kafka的传入JSON数据)_Apache Spark_Apache Kafka_Spark Structured Streaming - Fatal编程技术网

Apache spark 从Spark Streaming DataFrame中删除(损坏的)不符合模式的行(来自Kafka的传入JSON数据)

Apache spark 从Spark Streaming DataFrame中删除(损坏的)不符合模式的行(来自Kafka的传入JSON数据),apache-spark,apache-kafka,spark-structured-streaming,Apache Spark,Apache Kafka,Spark Structured Streaming,我有一个spark结构的热气腾腾的应用程序,我正在读卡夫卡的文章。 下面是我的代码的基本结构 我创建了Spark会话 val spark=火花会话 建设者 .appNameapp_名称 .getOrCreate 然后我从小溪里读 val数据流=火花 .readStream 卡夫卡先生 .optionkafka.bootstrap.servers,服务器列表 .选项订阅、主题 负载 在卡夫卡记录中,我将值转换为字符串。它从二进制转换为字符串。此时,数据框中有一列 val df=数据流 。选择$va

我有一个spark结构的热气腾腾的应用程序,我正在读卡夫卡的文章。 下面是我的代码的基本结构

我创建了Spark会话

val spark=火花会话 建设者 .appNameapp_名称 .getOrCreate 然后我从小溪里读

val数据流=火花 .readStream 卡夫卡先生 .optionkafka.bootstrap.servers,服务器列表 .选项订阅、主题 负载 在卡夫卡记录中,我将值转换为字符串。它从二进制转换为字符串。此时,数据框中有一列

val df=数据流 。选择$value.caststring作为json 基于预定义的模式,我尝试将JSON结构解析为列。但是,这里的问题是,如果数据不好,或者是不同的格式,那么它与定义的模式不匹配。因此,下一个数据帧df2会将数据帧的null值放入列中

val df2=df.selectfrom_json$json,schema作为数据 。选择数据* 我希望能够从df2中筛选出某列中有null的行,该列是我在数据库中用作主键的,即忽略与模式不匹配的坏数据

编辑:我在某种程度上能够做到这一点,但不是我想要的方式。
在我的过程中,我使用一个使用.foreachwriter过程的查询。它的作用是打开到数据库的连接,处理每一行,然后关闭连接。的文档提到了此过程所需的必要性。在process方法中,我从每一行获取值,并检查主键是否为null,如果为null,则不将其插入数据库

Kafka将数据存储为原始字节数组格式。数据生产者和消费者需要就处理数据的结构达成一致

如果生成的消息格式发生变化,消费者需要调整以读取相同的格式。当您的数据结构在不断发展时,问题就出现了,您可能需要在消费者端提供兼容


通过Protobuff定义消息格式解决了这个问题

只需过滤掉任何不需要的空值:

df2
  .filter(row => row("colName") != null)