使用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|
+---------+
但为什么它首先失败了?