Spark“reduceByKey”调用reducer的次数比预期的多

时间:2017-09-11 19:14:42

标签: python apache-spark pyspark

我有一个四行数据框,使用相同的键,如下所示:

row_no id  age  time
1      abc  70  1524299530
2      abc  69  1524299528
3      abc  68  1524299526
4      abc  67  1524299524

然后我尝试在此数据框上调用reduceByKey,如下所示:

new_rdd = df.rdd \
        .map(lambda row: (row['id'], [row['age'], row['time']])) \
        .reduceByKey(some_reducer)

some_reducer中,为了测试,我只返回上一个obj。我使用print来跟踪reducer的调用,发现spark已经调用了reducer四次,即(1, 2), (3, 4), (1, 3) and (1, 3)。基本上,减速器在第1行和第3行被调用两次。我用4个处理器在本地运行spark。我还尝试在这个工作上用1个处理器运行spark,并且(1, 2), (3, 4) and (1, 3)上的reducer被调用了三次。它必须与spark如何对数据进行分区有关,但仍然难以理解这种行为。有人可以为这种行为提供解释吗?

更新:我通过在每一行上添加一个额外的整数列并使reducer成为lambda a, b: a + b来进行更具建设性的测试。我清楚地观察到,当使用多处理器模式运行时,sp​​ark会进行四次添加:1 + 11 + 12 + 22 + 2。但是,最终结果仍然是4.在某种程度上,spark丢弃了2 + 2的重复减少。问题是为什么首先出现重复减少以及火花如何处理它们?

0 个答案:

没有答案
相关问题