如何在Spark SQL结构中为列添加别名

时间:2018-08-15 22:30:31

标签: apache-spark apache-spark-sql

sparkSession.sql("select struct(col1,col2) as myStruct from table1")

使用以下模式返回数据框

root
 |-- myStruct : struct (nullable = false)
 |    |-- col1: string (nullable = true)
 |    |-- col2: string (nullable = true)

但是我需要 col1 作为 myCol1 col2 作为 myCol2

当我在struct函数中使用 as 关键字时,它将失败

sparkSession.sql("select struct(col1 as myCol1,col2 as myCol2) as myStruct from table1")

给出以下错误消息

mismatched input 'as' expecting {')', ','}(line 1, pos 19)

如何在 struct 字段中获取列别名?

1 个答案:

答案 0 :(得分:0)

您可以在Spark 2.1.0中创建的DF上尝试

val newDF = oldDF.withColumn("MyCol",struct($"myCol.col1".alias("myCol1"),$"myCol.col2".alias("myCol2"))).drop("myCol").withColumnRenamed("MyCol","myCol")