【问题标题】:How use Window aggrgates on strongly typed Spark Datasets?如何在强类型 Spark 数据集上使用窗口聚合?
【发布时间】:2017-06-08 07:44:10
【问题描述】:

我正在慢慢尝试从Spark 2.x 适应新的(强类型)Dataset[U],但在使用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")))

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

【问题讨论】:

  • ds.withColumn("cumsum",sum($"x").over(Window.orderBy($"nb"))) 应该有你 Dataset[(Measurement,Double)] 行明智的。

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


【解决方案1】:

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


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

关于Window函数的更多信息可以在这篇博客文章Window Functions in Spark SQL by Databricks找到

【讨论】:

    【解决方案2】:

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

    对于你的特殊情况:

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

    希望对你有帮助

    【讨论】:

    • 这不是强类型
    猜你喜欢
    • 1970-01-01
    • 2017-03-23
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多