Apache spark 如何处理从卡夫卡到卡桑德拉的pySpark结构化流媒体

Apache spark 如何处理从卡夫卡到卡桑德拉的pySpark结构化流媒体,apache-spark,pyspark,cassandra,spark-structured-streaming,spark-cassandra-connector,Apache Spark,Pyspark,Cassandra,Spark Structured Streaming,Spark Cassandra Connector,我正在使用pyspark从卡夫卡那里获取数据,并将其插入卡桑德拉。我快到了,我只需要最后一步 def火花卡夫卡接收器: 第一步好! dc=火花\ .readStream\ 卡夫卡先生\ .optionkafka.bootstrap.servers,000.00.0.240:9092\ .选项订阅,我的主题\ 负载 dc.selectExprCASTkey作为字符串,CASTvalue作为字符串作为消息 第二步好! dc.writeStream\ .outputModeappend\ .forea

我正在使用pyspark从卡夫卡那里获取数据,并将其插入卡桑德拉。我快到了,我只需要最后一步

def火花卡夫卡接收器: 第一步好! dc=火花\ .readStream\ 卡夫卡先生\ .optionkafka.bootstrap.servers,000.00.0.240:9092\ .选项订阅,我的主题\ 负载 dc.selectExprCASTkey作为字符串,CASTvalue作为字符串作为消息 第二步好! dc.writeStream\ .outputModeappend\ .foreachBatchforeach\u批处理函数\ .开始\ .等待终止 第三步需要帮助 def foreach_batch_函数DF,epoch_id: Value=df.selectdf.Value ??????? 在CASSANDRA上写入数据帧 写\ .formatorg.apache.spark.sql.cassandra\ .mode'append'\ .options表=表名称,键空间=键空间\ 拯救 因此,我的值是这样的:

数据帧[值:二进制]

我需要插入一些打开我的值的东西,将二进制文件放入其中,并创建一个具有正确格式的数据帧,以访问数据库并使用它执行我代码的最后一部分。

您不再需要使用foreachBatch。您只需升级到Spark Cassandra Connector 2.5,它本机支持Spark结构化流媒体,这样您就可以编写:

dc.writeStream\ .formatorg.apache.spark.sql.cassandra\ .mode'append'\ .options表=表名称,键空间=键空间 .开始\ .等待终止 关于问题的第二部分——如果要将值转换为多列,需要使用from_json函数,将模式传递给它。下面是Scala中的示例,但Python代码应该非常类似:

val schemaStr=id:int,值:string val schema=StructType.fromDDLschemaStr val data=dc。选择ExprcastValue作为字符串 .selectfrom_json$value,schema.asdata .selectdata.*.dropdata
然后你可以通过writeStream从我的卡夫卡制作人那里写入数据。我发送了一个字符串,我想在这一点上,最好从那里创建JSON,这样消费者就可以找到JSON格式的消息。听起来怎么样,你认为在发送之前转换它更有意义吗?谢谢你的帮助!卡夫卡不关心类型——它处理二进制数据。因此,如何对数据进行编码是双方的责任。我之所以描述JSON,是因为我在代码中看到了转换为字符串。