簡體   English   中英

通過 Dataframe 讀取 XML 文件

[英]Reading XML File Through Dataframe

我有如下格式的 XML 文件。

<nt:vars>
<nt:var id="1.3.0" type="TimeStamp"> 89:19:00.01</nt:var>
<nt:var id="1.3.1" type="OBJECT ">1.9.5.67.2</nt:var>
<nt:var id="1.3.9" type="STRING">AB-CD-EF</nt:var>
</nt:vars>

我使用以下代碼在其上構建了 dataframe。 雖然代碼顯示 3 行並檢索 id 和 type 字段,但它沒有顯示實際值,即 89:19:00.01、1.9.5.67.2、AB-CD-EF

spark.read.format("xml").option("rootTag","nt:vars").option("rowTag","nt:var").load("/FileStore/tables/POC_DB.xml").show()

如果我必須在上面的行中添加任何其他選項以帶來值,請您幫助我。

您可以改為將rowTag指定為nt:vars

df = spark.read.format("xml").option("rowTag","nt:vars").load("file.xml")

df.printSchema()
root
 |-- nt:var: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- _VALUE: string (nullable = true)
 |    |    |-- _id: string (nullable = true)
 |    |    |-- _type: string (nullable = true)

df.show(truncate=False)
+-------------------------------------------------------------------------------------------+
|nt:var                                                                                     |
+-------------------------------------------------------------------------------------------+
|[[ 89:19:00.01, 1.3.0, TimeStamp], [1.9.5.67.2, 1.3.1, OBJECT ], [AB-CD-EF, 1.3.9, STRING]]|
+-------------------------------------------------------------------------------------------+

並且要將值作為單獨的行獲取,您可以分解結構數組:

df.select(F.explode('nt:var')).show(truncate=False)
+--------------------------------+
|col                             |
+--------------------------------+
|[ 89:19:00.01, 1.3.0, TimeStamp]|
|[1.9.5.67.2, 1.3.1, OBJECT ]    |
|[AB-CD-EF, 1.3.9, STRING]       |
+--------------------------------+

或者,如果您只想要這些值:

df.select(F.explode('nt:var._VALUE')).show()
+------------+
|         col|
+------------+
| 89:19:00.01|
|  1.9.5.67.2|
|    AB-CD-EF|
+------------+

暫無
暫無

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

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