簡體   English   中英

在 Pyspark 中讀取 xml 文件

[英]reading a xml file in Pyspark

我打開了一個 spark 會話和一個帶有 .xml 文件的目錄。 我只想讀取 .xml 文件的架構,但我想 spark 不會直接讀取,例如,我想讀取鑲木地板。

我的意思是,我正在嘗試執行以下操作:

path = "/.../.../.../filename.xml"
df_xml = spark.read.format("xml").option("rowTag", "<the rowTag name here>").load(path)
df_xml.printSchema()

我得到的是:

File "/opt/mapr/spark/spark-2.4.4/python/pyspark/sql/readwriter.py", line 166, in load
    return self._df(self._jreader.load(path))
  File "/opt/mapr/spark/spark-2.4.4/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
  File "/opt/mapr/spark/spark-2.4.4/python/pyspark/sql/utils.py", line 63, in deco
    return f(*a, **kw)
  File "/opt/mapr/spark/spark-2.4.4/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py", line 328, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o92.load.
: java.lang.ClassNotFoundException: Failed to find data source: xml. 

Caused by: java.lang.ClassNotFoundException: xml.DefaultSource

有沒有人嘗試在 pyspark 中讀取 xml 文件的架構? 我是新手,非常感謝您的反饋。

Parquet 格式包含有關架構的信息,而 XML 不包含。 您不能只讀取模式而不從數據中推斷它。

由於我沒有關於您的 XML 文件的信息,我將使用此示例: XML 示例文件

將該 XML 示例保存到sample.xml ,您必須指定Spark XML 包才能解析 XML 文件。

這是示例:

from pyspark.sql import SparkSession

if __name__ == "__main__":
    spark = SparkSession \
        .builder \
        .appName("Test") \
        .config("spark.jars.packages", "com.databricks:spark-xml_2.12:0.13.0") \
        .getOrCreate()

    df = spark.read.format('xml').options(rowTag='catalog').load('sample.xml')
    df.printSchema()

結果是:

root
 |-- book: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- _id: string (nullable = true)
 |    |    |-- author: string (nullable = true)
 |    |    |-- description: string (nullable = true)
 |    |    |-- genre: string (nullable = true)
 |    |    |-- price: double (nullable = true)
 |    |    |-- publish_date: date (nullable = true)
 |    |    |-- title: string (nullable = true)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM