gpt4 book ai didi

apache-spark - Spark中的XML处理

转载 作者:行者123 更新时间:2023-12-03 13:23:52 25 4
gpt4 key购买 nike

场景:
我的输入将是多个小型XML,并且应该将这些XML读取为RDD。执行与另一个数据集的连接并形成一个RDD,并将输出作为XML发送。

是否可以使用spark读取XML,将数据作为RDD加载?如果可能的话,如何读取XML。

样本XML:

<root>
<users>
<user>
<account>1234<\account>
<name>name_1<\name>
<number>34233<\number>
<\user>
<user>
<account>58789<\account>
<name>name_2<\name>
<number>54697<\number>
<\user>
<\users>
<\root>


如何将其加载到RDD中?

最佳答案

是的,这是可能的,但是细节会因您采用的方法而异。


如前所述,如果文件很小,则最简单的解决方案是使用SparkContext.wholeTextFiles加载数据。它将数据加载为RDD[(String, String)],其中第一个元素是路径,第二个文件内容。然后,您像在本地模式下一样分别解析每个文件。
对于较大的文件,可以使用Hadoop input formats


如果结构简单,则可以使用textinputformat.record.delimiter拆分记录。您可以找到一个简单的示例here。输入不是XML,但您应该给您输入信息并知道如何继续
否则Mahout提供XmlInputFormat

最后,可以使用SparkContext.textFile读取文件,并稍后进行调整以适应分区之间的记录。从概念上讲,这意味着与创建滑动窗口或partitioning records into groups of fixed size类似:


使用mapPartitionsWithIndex分区来识别分区之间损坏的记录,收集损坏的记录
使用第二个mapPartitionsWithIndex修复损坏的记录



编辑:

还有一个相对较新的spark-xml包,它允许您通过标记提取特定记录:

val df = sqlContext.read
.format("com.databricks.spark.xml")
.option("rowTag", "foo")
.load("bar.xml")

关于apache-spark - Spark中的XML处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33078221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com