我有一个巨大的Spark DataFrame,我使用以下语句创建
val df = sqlContext.read.option("mergeSchema", "true").parquet("parquet/partitions/path")
现在,当我尝试对上面的DataFrame进行列重命名或选择操作时,它会失败,说明发现了含有以下异常的模糊列
org.apache.spark.sql.AnalysisException:引用'Product_Type'不明确,可能是Product_Type#13,Product_Type#235
现在我看到了列,发现有两列Product_Type
和Product_type
,它们似乎是相同的列,由于模式合并随着时间的推移,创建了一个不同的字母大小写。现在我不介意保留重复列但Spark sqlContext由于某种原因不喜欢它。
我相信默认情况下spark.sql.caseSensitive
配置是真的所以不知道它失败的原因。我正在使用Spark 1.5.2。我是Spark的新手。
默认情况下,spark.sql.caseSensitive
属性是false
所以在你的rename
或select
声明之前,你应该将属性设置为true
sqlContext.sql("set spark.sql.caseSensitive=true")