【问题标题】:reducebykey and aggregatebykey in spark Dataframespark Dataframe 中的 reducebykey 和 aggregatebykey
【发布时间】:2017-01-03 06:58:01
【问题描述】:

我正在使用 spark 2.0 从 parquet 文件中读取数据。

 val Df = sqlContext.read.parquet("c:/data/parquet1")
 val dfSelect= Df.
      select(
        "id",
        "Currency",
        "balance"

      )



val dfSumForeachId=dfSelect.groupBy("id").sum("balance")
val total=dfSumForeachId.agg(sum("sum(balance)")).first().getDouble(0)

为了获得总余额值,这是在数据帧上使用操作 first() 获得它的最佳方法吗?

在 spark 2.0 中使用 groupby key 是否可以,它是否具有与 rdd 上的 groupbykey 相同的性能问题,是否需要通过网络对整个数据进行洗牌然后执行聚合,或者聚合在本地执行,如 reducebykey早期版本的火花

谢谢

【问题讨论】:

    标签: apache-spark apache-spark-sql apache-spark-2.0


    【解决方案1】:

    通过先使用来获取数据是一种完全有效的获取数据的方式。也就是说,做:

    val total = dfSelect.agg(sum("balance")).first().getDouble(0)
    

    可能会给你更好的性能来获得总数。

    group by key 和 reduce by key 的工作原理与以前的版本完全相同,原因相同。 group by key 不对您想要执行的操作做出任何假设,因此无法像 reduce by key 那样知道如何进行部分聚合。

    当您执行 dataframe groupby 和 sum 时,您实际上是在使用 + 选项进行按键缩减,而您所做的第二个聚合是使用 + 进行缩减。也就是说,dataframe 可以更有效地执行此操作,因为确切地知道做了什么,它可以执行许多优化,例如整个阶段的代码生成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-17
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      相关资源
      最近更新 更多