【问题标题】:Rearranging RDD in PySpark在 PySpark 中重新排列 RDD
【发布时间】:2021-05-14 18:44:52
【问题描述】:

我有一个这样的RDD

[('a', [('d2', 1), ('d1', 1)]),
 ('addition', [('d2', 1)]),
 ('administrative', [('d1', 1)]),
 ('also', [('d1', 1)])]

我希望输出看起来像

a#d2:1;d1:1
addition#d2:1
administrative#d1:1
also#d1:1

我试图先删除括号以实现输出

rdd_new.map(lambda x: re.sub('\(|\)', '', str(x)))

【问题讨论】:

    标签: apache-spark pyspark rdd


    【解决方案1】:

    您可以使用合适的字符串方法将每个 rdd 条目映射到一个字符串:

    result = rdd.map(lambda r: r[0] + '#' + ';'.join(['%s:%d' % (i[0], i[1]) for i in r[1]]))
    
    result.collect()
    # ['a#d2:1;d1:1', 'addition#d2:1', 'administrative#d1:1', 'also#d1:1']
    

    【讨论】:

    • 我们能不能像#d1:1;d2:1那样在d1之前得到d2
    • 可以排序:result = rdd.map(lambda r: r[0] + '#' + ';'.join(['%s:%d' % (i[0], i[1]) for i in sorted(r[1])]))
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多