【发布时间】:2014-09-08 09:19:25
【问题描述】:
假设我在 3 个节点上有一个分布式系统,我的数据分布在这些节点之间。例如,我有一个 test.csv 文件,它存在于所有 3 个节点上,它包含 2 列:
**row | id, c.**
---------------
row1 | k1 , c1
row2 | k1 , c2
row3 | k1 , c3
row4 | k2 , c4
row5 | k2 , c5
row6 | k2 , c6
row7 | k3 , c7
row8 | k3 , c8
row9 | k3 , c9
row10 | k4 , c10
row11 | k4 , c11
row12 | k4 , c12
然后我使用 SparkContext.textFile 将文件读取为 rdd 等。据我了解,每个火花工作节点都会从文件中读取 a 部分。所以现在假设每个节点都将存储:
- 节点 1:第 1~4 行
- 节点 2:第 5~8 行
- 节点 3:第 9~12 行
我的问题是,假设我想对这些数据进行计算,并且需要将键组合在一起的一个步骤,因此键值对将是 [k1 [{k1 c1} {k1 c2} {k1 c3}]].. 等等。
有一个函数叫groupByKey(),使用起来很贵,推荐使用aggregateByKey()。所以我想知道groupByKey() 和aggregateByKey() 如何在幕后工作?有人可以使用我上面提供的示例进行解释吗?洗牌后,行在每个节点上的位置?
【问题讨论】:
标签: apache-spark distributed-computing