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

How use Window aggrgates on strongly typed Spark Datasets?

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

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

ds 作为 Dataset[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")))

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

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

对于你的特殊情况:

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

希望对您有所帮助

当您向数据集添加新列时,我想别无选择,只能使用 dataframe.as[New Type] 方法


可以在此处找到更多信息

有关 Window 函数的更多信息,请参阅这篇博客文章 Window Functions in Spark SQL by Databricks