2016-11-06 8 views
2

私は、列の1つがXML文字列であるJSONファイルを持っています。PySparkの列からXML文字列をロード

私は、このフィールドを抽出し、最初のステップでファイルに書き込み、次のステップでファイルを読み込もうとしました。しかし、各行にはXMLヘッダータグがあります。したがって、結果のファイルは有効なXMLファイルではありません。

PySpark XMLパーサー( 'com.databricks.spark.xml')を使用してこの文字列を読み取り、値を解析するにはどうすればよいですか?

次は動作しません:

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

おかげで、 ラムを。

答えて

1

は、ハイブのXPathのUDF(LanguageManual XPathUDF)を試してみてください。

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

や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

感謝を!私はUDFアプローチを試して、それがどのように行ったかを更新します。データが複数のレイヤーにネストされているため、XPathは私のケースでは機能しません。 – Ram

関連する問題