如何在Spark DataFrame中将多个列写入Kafka队列

时间:2019-05-27 20:36:35

标签: java apache-spark dataframe apache-kafka

我知道我们可以将spark与kafka集成,并以键和值的格式将数据帧写入kafka队列,如下所示

df-数据框

 df.withColumnRenamed("Column_1", "key")
 .withColumnRenamed("Column_2", "value")
 .write()
 .format("kafka")
 .option("kafka.bootstrap.servers", "host1:port1,host2:port2")
 .save()

但是我如何将第3、4、5列以及许多列写入kafka队列? 如何一次性将整行写入kafka队列?

任何建议都值得赞赏

1 个答案:

答案 0 :(得分:0)

Kafka仅获取(键,值)格式的消息。因此,您必须将列聚合为一个值(例如JSON)。这是例子

这应该起作用:(构造适当的value_fields

import org.apache.spark.sql.functions._

val value_fields = df.columns.filter(_ != "Column_1") 

df
.withColumnRenamed("Column_1", "key")
.withColumn("value", to_json(struct(value_fields.map(col(_)):_*)))
.select("key", "value")
.write()
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.save()