我知道我们可以将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队列?
任何建议都值得赞赏
答案 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()