Загрузка данных XML из файла Google Earth KML в DataBricks - PullRequest
0 голосов
/ 17 апреля 2019

Я настраиваю DataBricks для сравнения и сопоставления данных из нескольких источников.Некоторые данные находятся в файлах CSV, некоторые в формате JSON, а другие - в файлах Google Планета Земля KML.Последнее действительно было проблемой;Я пытаюсь загрузить данные XML с помощью функции загрузки данных, но DataBricks не может создать таблицу из строки XML.Какова процедура для вставки XML в таблицу DataBricks?

1 Ответ

0 голосов
/ 22 апреля 2019

Лучший оптимальный способ использования библиотек spark-xml в вашей рабочей области.

Найдите spark-xml в разделе пакета maven / spark и выполните этот шаг, чтобы добавить его в библиотеки https://docs.databricks.com/user-guide/libraries.html#create-a-library

Присоединение библиотек к кластеру

https://docs.databricks.com/user-guide/libraries.html#attach-a-library-to-a-cluster

наконец, используйте следующий код для чтения XML-данных в блоках данных

xmldata = spark.read.format('xml').option("rootTag","note").load('dbfs:/mnt/mydatafolder/xmls/note.xml')

Также вот код Python для того же:

import xml.etree.ElementTree as ET
xmlfiles = dbutils.fs.ls(storage_mount_name)

##Get attribute names (for now I took all leafs of the xml structure)
firstfile = xmlfiles[0].path.replace('dbfs:','/dbfs')
root = ET.parse(firstfile).getroot()
attributes = [node.tag for node in root.iter() if len(node)==0]
clean_attribute_names = [re.sub(r'\{.*\}', '', a) for a in attributes]

#Create Dataframe and save it as csv
df = pd.DataFrame(columns=clean_attribute_names, index=xmlfiles)
for xf in xmlfiles:
    afile = xf.path.replace('dbfs:','/dbfs')
    root = ET.parse(afile).getroot()
    df.loc[afile] = [node.text for node in root.iter() if node.tag in attributes]
...