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))
有没有人有更好的解决方案?
添加回答
举报