无法重命名Dataframe的列

时间:2017-03-28 12:43:35

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

使用Spark 1.6.3显示表的分区时,我无法重命名Dataframe的列。 为了重现这个问题,我构建了以下分区表

sqlContext.sql("create table test (foo string) partitioned by (dt string)")

val df = sqlContext.sparkContext.parallelize(Seq(("foo", 1), ("bar", 2)))
  .toDF("column", "dt")

df.write.mode("overwrite").partitionBy("dt").insertInto("test")

我可以检索表格中的可用分区列表

scala> sqlContext.sql(s"show partitions test").show

+------+
|result|
+------+
|  dt=1|
|  dt=2|
+------+

现在,我想使用withColumnRenamed重命名该列

sqlContext.sql(s"show partitions test").withColumnRenamed("result", "partition").show

哪个失败并显示以下错误消息

  

org.apache.spark.sql.AnalysisException:已解析的属性结果#835从运算符中的结果#826中丢失!项目[结果#835 AS分区#836];

我可以使用简单的别名来解决这个问题

> sqlContext.sql(s"show partitions test").select($"result".as("partition")).show

+---------+
|partition|
+---------+
|     dt=1|
|     dt=2|
+---------+

但为什么它首先失败了?

0 个答案:

没有答案