Python 用PySpark解析巨大的XML维基百科转储

Python 用PySpark解析巨大的XML维基百科转储,python,pyspark,wikipedia,Python,Pyspark,Wikipedia,我试图将维基百科历史转储从XML解析为PySpark数据框架。当我在一个内存为1.6 TB的集群上解析一个大文件(+100GB)时,我遇到了OutOfMemoryError:请求的数组大小超过了VM限制错误(即使我正在使用集群中的整个RAM,并且我尝试了executorMemory和MemoryOverhead的一些组合)。XML文件的结构如下所示: <mediawiki> <page> <id>1</id>

我试图将维基百科历史转储从XML解析为PySpark数据框架。当我在一个内存为1.6 TB的集群上解析一个大文件(+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>
我希望将“页面”作为行标记,因为我需要一些信息,如页面的标题和id(之后我希望分解修订以获得每个修订的行)。而且,我认为我得到了这个错误,因为有些页面有太多的修改,它们不能适应节点上的底层java数组

如果我使用:

df = spark.read.format('xml').options(rowTag='revision').load("xmlfile.xml")
一切正常,但我丢失了有关页面的信息,如标题和id等

有人能提出另一种解析XML的方法吗?可能使用'revision'作为行标记,但不知何故,将id和标题保留在'page'标记中。提前谢谢

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