Как получить родительский узел XML с помощью PySpark - PullRequest
0 голосов
/ 03 июня 2019

В приложении, которое я разрабатываю, мне нужно проанализировать с помощью Spark различные XML-файлы, структура которых меняется от файла к файлу.Другими словами, у меня есть несколько XML-каналов с похожими данными, но разными структурами данных.Для каждого из этих каналов я пишу соответствующее программное обеспечение для импорта (я использую Python, следовательно, PySpark, так как я предпочитаю его Java и Scala).

Я проанализировал почти каждый канал, кроме двухиз них, которые имеют общий "дефект".Во всех других каналах у меня есть два XML-файла, один из которых называется «agenzie.xml» (или что-то в этом роде), который по сути представляет собой таблицу, которая содержит все данные обо всех поставщиках, зарегистрированных на веб-сайте, предоставляющем мне канал,один с именем "annunci.xml", который содержит все данные об объявлениях, которые поставщики дают мне.В этих двух файлах - я ссылка только один, но другой очень похож - у меня есть иерархическая структура, что-то вроде

<?xml version="1.0" encoding="iso-8859-1"?>
<root>
    <vendor>
        <info1></info1>
        <info2></info2>
        <ads>
            <ad>
                <info1_about_ad></info1_about_ad>
                <info2_about_ad></info2_about_ad>
            </ad>
        </ads>
    </vendor>
    <vendor>
        <info1></info1>
        <info2></info2>
        <ads>
            <ad>
                <info1_about_ad></info1_about_ad>
                <info2_about_ad></info2_about_ad>
            </ad>
        </ads>
    </vendor>
</root>

код, который я использую для создания кадра данныхэто:

df = spark.read.format("com.databricks.spark.xml").options(rowTag="ad").load("gs://bucket-HIDDEN/import/it/HIDDEN/HIDDEN.xml").repartition(3)
my_rdd = df.rdd.map(Convert) # Convert is a method I've written

Моя проблема в том, что я не знаю, как получить доступ, от Convert, к info1 или info2 полям родительских узлов XML.Я думал об использовании vendor в качестве rowTag и изменении ads в массиве, но я думаю, что это приведет к узкому месту, так как данные, которые я должен анализировать, весят около 5 ГБ, и в то время как другие каналы будутанализируется быстро (без этого обходного пути), эти два потока будут анализироваться слишком медленно.

...