Я загружаю xml-файл, используя com.databricks.spark.xml, и я хочу прочитать атрибут тега, используя sql-контекст.Извлечение атрибутов тегов из xml с использованием sparkxml
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
при чтении атрибута атрибута xml для некоторого фиксированного значения с использованием опции («attributePrefix», «_»), а затем при выборе вы можете напрямую выбрать корневой атрибут, как любой другой элемент, например, выбрать _TaxRate из соблазнительного – SanthoshPrasad