我很抱歉长时间阅读。感谢您的耐心等候。
我有两个rdds A
和B
,还有一个reducer
类。
A
包含两列(key
,a_value
)。 A是带键的-key
列中没有键出现多次。
B
有两列(key
,b_value
)-但没有输入关键字,因此关键字字段可以重复多次。还有一些键可能会严重偏斜-让我们称它们为热键。
Reducer使用a_value
构造,并且可以任何顺序使用b_values
的对应密钥。最后,化简器可以产生代表还原的c_value
。
减速器的示例用法如下(伪代码)
:reducer = construct_reducer(a_value)
for b_value in b_values:
reducer.consume(b_value)
c_value = reducer.result()
我想使用表A
和B
来生成包含两列(C
,key
)的表c_value
。
这可以通过完成
轻松完成。reduceByKey
以产生具有两列key, list[b_values]
的rdd key, c_value
的表采用该方法的问题是,B
中的热键即使在执行者内存很高的情况下也会导致reduceByKey
成为OOM。
理想情况下,我想加入并立即从reducer.consume
{strong>进入 b_value
B
A
-减速器是由a_value
个构造而成。考虑这一点的另一种方法是使用aggregateByKey
,但要从另一个rdd获得不同的zeroValues
。
我该如何表达? (我看着cogroup和aggregateByKey没有任何运气)
感谢阅读!