【发布时间】:2015-05-06 23:22:16
【问题描述】:
创建DataFrame.withcolumn() 时,Spark 开发团队忘记检查列名是否已在使用中。
开头:
val res = sqlContext.sql("select * from tag.tablename where dt>20150501 limit 1").withColumnRenamed("tablename","tablename")
res.columns
显示:
res6: Array[String] = Array(user_id, service_type_id, tablename, dt)
然后
val res1 = res.withColumn("tablename",res("tablename")+1)
res1.columns
显示:
res7: Array[String] = Array(user_id, service_type_id, tablename, dt, tablename)
顺便说一句,res1.show 有效。
BUG 从这里开始:
res1.select("tablename")
org.apache.spark.sql.AnalysisException: Ambiguous references to tablename: (tablename#48,List()),(tablename#53,List());
【问题讨论】:
-
这应该在 Spark 的 JIRA 中报告,而不是 StackOverflow
-
他们已经修复了它——我已经链接了相关的 JIRA 作为答案。但是,这是一个很好的建议:我发现 Spark SQL 团队对我提交的请求非常敏感。搜索在 ASF JIRA 网站上也很有效——这是我在
dataframe withcolumn上搜索时的第二个结果。 (实际上,它响了铃,因为我注意到前段时间签入正在修复它。)
标签: apache-spark apache-spark-sql