我正在尝试在Databricks上的PySpark结构化流中使用Kinesis源分析数据。
我创建了一个数据框,如下所示。
kinDF = spark.readStream.format("kinesis").("streamName", "test-stream-1").load()
稍后,我从base64编码转换了数据,如下所示。
df = kinDF.withColumn("xml_data", expr("CAST(data as string)"))
现在,我需要使用xpath从df.xml_data列中提取一些字段。您能提出任何可能的解决方案吗?
如果我直接以xml_df = spark.read.format("xml").options(rowTag='Consumers').load("s3a://bkt/xmldata")
的形式为这些xml文件创建一个数据框,则可以使用xpath进行查询:
xml_df.select("Analytics.Amount1").show()
但是,不确定在文本格式的数据的Spark Streaming数据帧上如何类似地提取元素。
是否有任何XML函数可以使用模式转换文本数据?我看到了一个使用from_json的json数据示例。
是否可以在数据框列上使用spark.read?
我需要为每5分钟窗口查找一个汇总的“ Amount1”。
感谢您的帮助
答案 0 :(得分:0)
您可以使用com.databricks.spark.xml.XmlReader
从列中读取xml数据,但需要RDD,这意味着您需要使用df
将RDD
转换为df.rdd
,这可能会影响性能。
以下是Spark Java中未经测试的代码:
import com.databricks.spark.xml
xmlRdd = df = kinDF.select("xml_data").map(r -> r[0])
new XmlReader().xmlRdd(spark, xmlRdd)