如何在强类型 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
我正在慢慢尝试适应 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