如何使用Window在强类型Spark数据集上进行聚合?

时间:2017-06-08 07:44:11

标签: scala apache-spark apache-spark-dataset

我正在慢慢地尝试从Dataset[U]适应新的(强类型)Spark 2.x,但在使用Window函数时难以维护类型信息。

case class Measurement(nb:Long,x:Double)

dsDataset[Measurement],我想做点什么

ds.map{m => (m,sum($"x").over(Window.orderBy($"nb"))}

但是这不起作用(因为它给我的Dataset[(Measurement,Column)]而不是Dataset[(Measurement,Double)]

使用withColumn给了我一个Dataset[Row],所以我丢失了类型信息:

ds.withColumn("cumsum",sum($"x").over(Window.orderBy($"nb")))

那么,是否有更好的方法在强类型Window上使用Datasets函数?

2 个答案:

答案 0 :(得分:0)

您可以使用as[U]方法将Dataframe(或Dataset[Row])转换为Dataset[U]

特殊情况:

ds.withColumn("cumsum",sum($"x").over(Window.orderBy($"nb"))).as[(Measurement,Column)]

希望有所帮助

答案 1 :(得分:0)

在向数据集中添加新列时,我想除了使用dataframe.as[New Type]方法之外别无选择

可在此处找到更多信息How to add a column to Dataset without converting from a DataFrame and accessing it?

有关窗口功能的更多信息,请参阅此博客文章Window Functions in Spark SQL by Databricks