【问题标题】:reduce, reduceByKey, reduceGroups in Spark or FlinkSpark 或 Flink 中的 reduce、reduceByKey、reduceGroups
【发布时间】:2019-09-29 22:18:10
【问题描述】:
reduce: 函数采用累积值和下一个值来查找聚合。
reduceByKey: 与指定key也是一样的操作。
reduceGroups:是对分组数据应用指定的操作。
我不知道这些操作是如何管理内存的。例如,使用reduce 函数时如何获取数据(例如,所有数据都加载到内存中?)?我想知道如何为减少操作管理数据。我也想知道根据数据管理这些操作有什么区别。
【问题讨论】:
标签:
apache-spark
apache-spark-sql
mapreduce
apache-flink
【解决方案1】:
Reduce 是 Spark 中最便宜的操作之一,因为它唯一做的实际上是将相似的数据分组到同一个节点。reduce 操作的唯一成本是读取元组并决定它应该在哪里被分组。
这意味着简单的reduce 相比reduceByKey 或reduceGroups 更昂贵,因为Spark 不知道如何进行分组和搜索元组之间的相关性。
如果元组不满足任何要求,Reduce 也可以忽略它。