2 回答

TA貢獻1830條經驗 獲得超3個贊
對于這個問題,不需要使用 ReduceByKey。
定義 RDD
rdd = sc.parallelize([('2002', ['cougar', 1]),('2002', ['the', 10]),('2002', ['network', 4]),('2002', ['is', 1]),('2002', ['database', 13])])
查看 RDD 值
rdd.collect()
:
[('2002', ['cougar', 1]), ('2002', ['the', 10]), ('2002', ['network', 4]), ('2002', ['is', 1]), ('2002', ['database', 13])]
應用 groupByKey 函數并將值映射為列表,如您在Apache Spark 文檔中所見。
rdd_nested = rdd.groupByKey().mapValues(list)
請參閱 RDD 分組值
rdd_nested.collect()
:
[('2002', [['cougar', 1], ['the', 10], ['network', 4], ['is', 1], ['database', 13]])]

TA貢獻1765條經驗 獲得超5個贊
我提出了一種解決方案:
def wagg(a,b):
if type(a[0]) == list:
if type(b[0]) == list:
a.extend(b)
else:
a.append(b)
w = a
elif type(b[0]) == list:
if type(a[0]) == list:
b.extend(a)
else:
b.append(a)
w = b
else:
w = []
w.append(a)
w.append(b)
return w
rdd2 = rdd1.reduceByKey(lambda a,b: wagg(a,b))
有沒有人有更好的解決方案?
添加回答
舉報