Python 用PySpark解析巨大的XML维基百科转储
我试图将维基百科历史转储从XML解析为PySpark数据框架。当我在一个内存为1.6 TB的集群上解析一个大文件(+100GB)时,我遇到了OutOfMemoryError:请求的数组大小超过了VM限制错误(即使我正在使用集群中的整个RAM,并且我尝试了executorMemory和MemoryOverhead的一些组合)。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>
<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")