0
我使用com.databricks.spark.xml加載xml文件,並且我想使用sql上下文讀取標記屬性。使用sparkxml從xml提取標記屬性
XML:
<Receipt>
<Sale>
<DepartmentID>PR</DepartmentID>
<Tax TaxExempt="false" TaxRate="10.25"/>
</Sale>
</Receipt>
通過加載該文件,
val df = sqlContext.read.format("com.databricks.spark.xml").option("rowTag","Receipt").load("/home/user/sale.xml");
df.registerTempTable("SPtable");
打印模式:
root
|-- Sale: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- DepartmentID: long (nullable = true)
| | |-- Tax: string (nullable = true)
現在我想提取標記屬性TaxExempt從Tax.I嘗試下面的代碼,它給我錯誤。
val tax =sqlContext.sql("select Sale.Tax.TaxExempt from SPtable");
錯誤:
org.apache.spark.sql.AnalysisException: cannot resolve 'Sale.Tax[TaxExempt]' due to data type mismatch: argument 2 requires integral type, however, 'TaxExempt' is of string type.; line 1 pos 7
任何幫助,高度讚賞。數據幀的
謝謝。我想出了版本問題,並能夠按照您在這裏顯示的那樣打印架構。您選擇的Sale.Tax ['@ TaxRate']幫助我解決了我的問題。非常感謝:) – vds
如何獲取相同的,如果它在'根'下? – vds
使用選項(「attributePrefix」,「_」)將xml設置屬性前綴讀取爲某個固定值時,然後在選擇時可以像其他任何元素一樣直接選擇root屬性,例如,從temptable中選擇_TaxRate – SanthoshPrasad