使用 mergeSchema 时 Spark DataFrame 重复列名

Ume*_*cha 1 scala apache-spark apache-spark-sql

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

val df = sqlContext.read.option("mergeSchema", "true").parquet("parquet/partitions/path")
Run Code Online (Sandbox Code Playgroud)

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

org.apache.spark.sql.AnalysisException:引用“Product_Type”不明确,可能是 Product_Type#13、Product_Type#235

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

我相信默认spark.sql.caseSensitive配置是正确的,所以不知道为什么会失败。我正在使用 Spark 1.5.2。我是 Spark 新手。

Ram*_*jan 5

默认情况下,spark.sql.caseSensitive属性位于or语句false之前,您应该将该属性设置为renameselecttrue

sqlContext.sql("set spark.sql.caseSensitive=true")
Run Code Online (Sandbox Code Playgroud)