如何将流式XML解析为数据帧?

时间:2017-01-30 03:27:24

标签: apache-spark apache-spark-sql spark-streaming spark-dataframe

我正在使用kafka主题的XML文件。任何人都可以告诉我如何将XML解析为数据帧。

val df = sqlContext.read
    .format("com.databricks.spark.xml")
    //.option("rowTag","ns:header")
   // .options(Map("rowTag"->"ntfyTrns:payloadHeader","rowTag"->"ns:header"))
       .option("rowTag","ntfyTrnsDt:notifyTransactionDetailsReq")
    .load("/home/ubuntu/SourceXML.xml")
    df.show
    df.printSchema()
    df.select(col("ns:header.ns:captureSystem")).show()

我能够从XML中确定信息信息。我不知道如何传递或转换或将RDD [String]从kafka主题加载到sql read API。

谢谢!

1 个答案:

答案 0 :(得分:1)

我面临同样的情况,做了一些研究我发现有些人使用这种方法将RDD转换为DataFrame,使用如下here所示的代码:

val wrapped = rdd.map(xml => s"""<a>$xml</a>""")
val df = new XmlReader().xmlRdd(sqlContext, wrapped)

你只需要从DStream获取RDD,我这样做是使用pyspark

streamElement = ssc.textFileStream("s3n://your_path")
streamElement.foreachRDD(process)

其中process方法具有以下结构,因此您可以使用rdds

执行所有操作
def process(time, rdd):
  return value