Spark-xml创建`_VALUE`列,与_value

时间:2018-03-27 13:55:50

标签: scala apache-spark dataframe select

我使用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解决这个问题?

1 个答案:

答案 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")

希望这有帮助!