首页 > 解决方案 > Apache Spark XML 转换为 JavaRDD

问题描述

我尝试使用 spark 读取 xml 文件并将其转换为 JavaRDD 数组。我已阅读有关如何将其转换为 DataSet 的信息,但我想知道 JavaRDD 是否可行。我必须提到,在我的 xml 文件中,我有一个大小并不总是相同的列表。这是我的 XML 文件的示例。

 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<logs>
    <log>
        <id>1</id>
        <clientId>1</clientId>
        <date>Wed Apr 03 21:16:18 EEST 2019</date>
        <itemList>
            <item>2</item>
        </itemList>
    </log>
    <log>
        <id>2</id>
        <clientId>2</clientId>
        <date>Wed Apr 03 21:16:19 EEST 2019</date>
        <itemList>
            <item>1</item>
            <item>2</item>
            <item>3</item>
        </itemList>
    </log>
</logs>

谢谢!

标签: javaapache-sparkspark-streaming

解决方案


这是一个可能的解决方案:https ://github.com/databricks/spark-xml/issues/213

这是您需要的:

import com.databricks.spark.xml.XmlReader

val rdd = sc.parallelize(Seq("<books><book>book1</book><book>book2</book></books>"))
val df = new XmlReader().xmlRdd(spark.sqlContext, rdd)
df.show

+--------------+
|          book|
+--------------+
|[book1, book2]|
+--------------+

df.printSchema

root
 |-- book: array (nullable = true)
 |    |-- element: string (containsNull = true)

从 rdd 到 JavaRDD 相当简单。(wrapRdd,查看文档)。

我希望它回答了你的问题。


推荐阅读