首页 > 解决方案 > 在 pyspark 中使用元组映射

问题描述

我有一个格式的 RDD[(("doc1", ("ab","bc","cd",...)),("doc2", ("de","ab","ab",...)))...]

我们可以将其映射到格式的 RDD[((ab, (doc1, doc2,...)),(bc, (doc1, doc2,...))]

标签: pythonpyspark

解决方案


通过查看您提供的代码,我不确定您的列表是否包含单个元组或多个元组。
假设你有一个rddof tuples,你可以申请

  1. flatMap展平原件的第二个元素tuple,然后应用
  2. reduceByKey将结果聚合到tuplesof 中(key, list),然后应用
  3. map将内部转换liststuples
rdd = (sc.parallelize([("doc1", ("ab","bc","cd")), ("doc2", ("de","ab","ab"))])
       .flatMap(lambda x: [(i, [x[0]]) for i in x[1]])
       .reduceByKey(lambda a, b: a + b)
       .map(lambda x: (x[0], tuple(x[1]))))
print(rdd.collect())
[('cd', ('doc1',)), ('bc', ('doc1',)), ('ab', ('doc1', 'doc2', 'doc2')), ('de', ('doc2',))]

推荐阅读