我有问题要解决。我有一个kafka生产者,它生产到特定主题的messages(xmls)。现在,这是一个流数据,我正在使用Spark流从主题中获取那些消息。我正在将这些消息写到控制台输出。现在,需要对这些消息执行操作(它们基本上是xml),这些xml需要解析,我也为此编写了解析器。现在,当我将xml硬编码为字符串变量时,解析器运行良好。但是,我需要从spark数据框获取xml。到目前为止,这是我从kafka接收消息的方法。
val spark = SparkSession.builder
.appName("kafka-ingestion")
.master("local")
.config("spark.sql.orc.impl","native")
.getOrCreate()
import spark.implicits._
// Gets the xpath
//val xpaths = get_xpaths(filename)
val df = spark
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("subscribe", "xmlpoc")
.option("encoding","UTF-8")
.option("startingOffsets", "earliest")
.load()
val df2 = df.selectExpr( "CAST(value AS STRING)")
df2.writeStream.format("console")
.outputMode("append")
.start().awaitTermination()
// Now perform parsing on each value of df2.
执行此操作时,我可以看到数据框中所有消息发送到控制台。但是,我希望对所有这些消息执行操作(例如在此处解析)。我不知道该怎么做。我尝试了udfs,但除了我的value列外,它们还添加了另一列。因此,似乎没有任何效果。任何帮助表示赞赏。