使用PySpark解析巨大的XML Wikipedia转储

时间:2019-01-26 20:40:52

标签: python pyspark wikipedia

我正在尝试将Wikipedia历史记录转储从XML解析为PySpark Dataframe。当我在具有1.6 TB RAM的群集上解析一个巨大的文件(+ 100GB)时,出现OutOfMemoryError:请求的数组大小超出了VM限制错误(即使我正在利用群集中的整个RAM,也尝试了几种组合executorMemory和MemoryOverhead的值)。 XML文件的结构如下:

<mediawiki>
    <page>
        <id>1</id>
        <title>SomeTitle</title>
        <revision>... </revision>
        <revision>... </revision>
        <revision>... </revision>
        ...
    </page>
    <page>
        <id>2</id>
        <title>SomeTitle</title>
        <revision>... </revision>
        <revision>... </revision>
        <revision>... </revision>
        ...
    </page>
    ...
</mediawiki>

我的代码是:

df = spark.read.format('xml').options(rowTag='page').load("xmlfile.xml")

我希望将“页面”作为rowTag,因为我需要页面中的一些信息,例如标题和ID(此后,我希望爆炸修订以获取每个修订的行)。而且,我认为我收到此错误消息是因为某些页面的修订版太多,并且无法放入节点上的基础Java数组。

如果我使用:

df = spark.read.format('xml').options(rowTag='revision').load("xmlfile.xml")

一切正常,但是我丢失了有关标题和ID等页面的信息。

有人可以提出另一种解析XML的方法吗?也许将'revision'用作rowTag,但是以某种方式保留了'page'标记中的ID和标题。预先感谢。

0 个答案:

没有答案
相关问题