Spark 数据集别名列动态创建,就像数据帧一样



可能是一个非常愚蠢的问题,但对于:

val ds3 = ds.groupBy($"ip")
.avg("humidity") 

目前尚不清楚如何对于数据集而不是数据帧,如何像即时使用别名一样重命名列。我尝试了一些方法,但无济于事。尝试时没有错误,但没有效果。

我希望"avg_humidity"作为列名。

扩展问题,如果我发出:

val ds3 = ds.groupBy($"ip")
.avg() 

如何处理?

avg

不提供别名功能,您可能需要额外的withColumnRenamed

val ds3 = ds.groupBy($"ip")
.avg("humidity")
.withColumnRenamed("avg(humidity)","avg_humidity")

相反,您可以使用.agg(avg("humidity").as("avg_humidity"))

val ds3 = ds.groupBy($"ip").agg(avg("humidity").as("avg_humidity"))

groupBy(cols: Column*)返回一个RelationalGroupedDataset

avg(colNames: String*)的返回类型是DataFrame,因此通过使用as(alias: String),您只需将别名分配给新的数据帧,而不是列。

因此,有关重命名数据帧中的列的讨论在这里。

相关内容

最新更新