-1
我想將帶有3個不同RowTags的巨大XML文件讀取到Apache Spark Dataframes中。使用多個行標記在Spark中讀取XML文件
RowTag = XML元素,您將其解釋爲Spark中的一行。
的標籤
- 包含不同的數據結構
- 不重疊
XML的火花(https://github.com/databricks/spark-xml)只提供閱讀一個RowTag一段時間,所以我需要閱讀相同的文件3次(不高效)。
有沒有什麼方法可以在一次讀取中讀取文件?
詳情:
我有包含3列出了一個巨大的XML文件(24 GB):
<myFile>
<ContainedResourceList>
<SoundRecording><Title>A</Title></SoundRecording>
... several million records ...
<SoundRecording><Title>Z</Title></SoundRecording>
</ContainedResourceList>
<ContainedReleaseList>
<Release><ReleaseType>Single</ReleaseType></Release>
... several million records ...
<Release><ReleaseType>LP</ReleaseType></Release>
</ContainedReleaseList>
<ContainedTransactionList>
<Transaction><Sales>1</Sales></Transaction>
... several million records ...
<Transaction><Sales>999</Sales></Transaction>
</ContainedTransactionList>
</myFile>
XML文件是有效的。 我想閱讀RowTags SoundRecording,發佈&事務。
我寧願Scala libs,但我會很高興任何使能閱讀的庫。
PS: 他的模式輸出&怎麼可能看起來像?
- 最佳選擇:對於每個RowTag
- 醜陋期權3個DataFrames的數組,一個:一個包含所有3個數據結構的可能要素數據幀
我感謝你們每個標籤添加多個列爲建議的解決方案。建議的「爆炸」解決方案適用於小文件。但它在一個巨大的文件(24 GB)上失敗:'java.lang.OutOfMemoryError:請求的數組大小超過VM限制' 在此解決方案中,整個ContainedResourceList被讀入一條記錄。 ContainedResourceList包含ca. 1000萬SoundRecordings。 ContainedResourceList大小爲ca.輸入文件的1/3。 我在3個主機羣集上測試每個8GB RAM。我可以使用更多的RAM,但是爲了在一臺主機上讀取整個文件而使用大量RAM並不是使用Spark的理念。 – JanDE