Spark DataFrame在使用mergeSchema时重复列名

时间:2017-12-11 15:44:01

标签: scala apache-spark apache-spark-sql

我有一个巨大的Spark DataFrame,我使用以下语句创建

val df = sqlContext.read.option("mergeSchema", "true").parquet("parquet/partitions/path")

现在,当我尝试对上面的DataFrame进行列重命名或选择操作时,它会失败,说明发现了带有以下异常的不明确的列

  

org.apache.spark.sql.AnalysisException:Reference' Product_Type'是   不明确的,可以是Product_Type#13,Product_Type#235

现在我看到了列,发现有两列Product_TypeProduct_type,它们似乎是相同的列,因为随着时间的推移,模​​式合并创建了一个不同的字母大小写。现在我不介意保留重复的列,但Spark sqlContext由于某种原因不喜欢它。

我相信默认情况下spark.sql.caseSensitive配置是真的,所以不知道它失败的原因。我正在使用Spark 1.5.2。我是Spark的新手。

1 个答案:

答案 0 :(得分:4)

默认情况下,spark.sql.caseSensitive属性为false,因此在renameselect语句之前,您应将该属性设置为true

sqlContext.sql("set spark.sql.caseSensitive=true")