我使用Spark来处理存储在XML文件中的一些数据。 我成功地加载了我的数据并打印了模式:
val df = spark.read
.format("com.databricks.spark.xml")
.option("rowTag","elementTag")
.load(myPath+"/myfile.xml")
df.printSchema
这给我一个看起来像这样的结果:
root
|-- _id: string (nullable = true)
|-- _type: string (nullable = true)
|-- creationDate: struct (nullable = true)
| |-- _VALUE: string (nullable = true)
| |-- _value: string (nullable = true)
|-- lastUpdateDate: struct (nullable = true)
| |-- _VALUE: string (nullable = true)
| |-- _value: string (nullable = true)
从这个数据中,我想只提取某些字段,使用'select'应该很容易。所以我正在做下面的请求:
df.select("_id","creationDate._value","lastUpdateDate._value")
但我收到错误:
org.apache.spark.sql.AnalysisException: Ambiguous reference to fields StructField(_VALUE,StringType,true), StructField(_value,StringType,true);
我的问题是spark sql不区分大小写,我的文件包含字段_value
和_VALUE
,我无法更改输入文件。
有没有办法用Spark解决这个问题?
答案 0 :(得分:0)
Spark-xml创建_VALUE
xml
代码中没有与其他代码冲突的子代。
您可以在阅读_VALUE
作为
xml
val df = spark.read
.format("com.databricks.spark.xml")
.option("rowTag","elementTag")
.option("valueTag", "anyName")
.load(myPath+"/myfile.xml")
希望这有帮助!