2016-11-06 6 views
2

Ich habe eine JSON-Datei, in der eine der Spalten eine XML-Zeichenfolge ist.XML-String aus Spalte in PySpark laden

Ich habe versucht, dieses Feld zu extrahieren und im ersten Schritt in eine Datei zu schreiben und die Datei im nächsten Schritt zu lesen. Jede Zeile hat jedoch ein XML-Header-Tag. Die resultierende Datei ist also keine gültige XML-Datei.

Wie kann ich den PySpark-XML-Parser ('com.databricks.spark.xml') verwenden, um diese Zeichenfolge zu lesen und die Werte zu analysieren?

Die folgende nicht funktioniert:

tr = spark.read.json("my-file-path") 
trans_xml = sqlContext.read.format('com.databricks.spark.xml').options(rowTag='book').load(tr.select("trans_xml")) 

Danke, Ram.

Antwort

1

Versuchen Hive XPath UDF (LanguageManual XPathUDF):

>>> from pyspark.sql.functions import expr 
>>> df.select(expr("xpath({0}, '{1}')".format(column_name, xpath_expression))) 

oder Python UDF:

>>> from pyspark.sql.types import * 
>>> from pyspark.sql.functions import udf 
>>> import xml.etree.ElementTree as ET 
>>> schema = ... # Define schema 
>>> def parse(s): 
...  root = ET.fromstring(s) 
     result = ... # Select values 
...  return result 
>>> df.select(udf(parse, schema)(xml_column)) 
+0

Dank! Ich werde den UDF-Ansatz ausprobieren und aktualisieren, wie es gelaufen ist. Ich glaube nicht, dass XPath für meinen Fall funktioniert, da die Daten in mehreren Ebenen verschachtelt sind. – Ram

Verwandte Themen