【问题标题】:Spark: group only part of the rows in a DataFrameSpark:仅对 DataFrame 中的部分行进行分组
【发布时间】:2019-10-15 03:54:54
【问题描述】:

从给定的 DataFrame 中,我想只将几行组合在一起,并将其他行保留在同一个 DataFrame 中。

我目前的解决方案是:

val aggregated = mydf.filter(col("check").equalTo("do_aggregate")).groupBy(...).agg()
val finalDF = aggregated.unionByName(mydf.filter(col("check").notEqual("do_aggregate")))

但我想找到一种更优雅、更高效的方式。

【问题讨论】:

  • 您是否设法执行此操作并执行 df.show?
  • 这可以通过窗口函数来完成,但你应该先展示一个具体的例子

标签: scala apache-spark apache-spark-sql


【解决方案1】:

使用派生列进行分组,具体取决于检查。

mydf.groupBy(when(col("check").equalTo("do_aggregate"), ...).otherwise(monotonically_increasing_id)).agg(...)

如果您在数据框中有唯一键,请使用它而不是 monotonically_increasing_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 2014-05-15
    • 2019-10-03
    • 1970-01-01
    • 2018-10-18
    相关资源
    最近更新 更多