我正在慢慢地尝试从Dataset[U]
适应新的(强类型)Spark 2.x
,但在使用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")))
那么,是否有更好的方法在强类型Window
上使用Datasets
函数?
答案 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