【问题标题】:transform touple with (key and list) to (key and list item)将带有(键和列表)的元组转换为(键和列表项)
【发布时间】:2018-10-03 12:46:58
【问题描述】:

我有一个带有 (key, list[word1, word2, word3]) 的 RDD,我想将其转换为 (key, word1), (key, word2)... (key, word-n),可以有人指出我如何解决这个问题的正确方向吗?

【问题讨论】:

标签: python python-3.x pyspark rdd


【解决方案1】:

使用列表推导,遍历元组并将第一个元素与第二个元素中的每个项目相关联:

>>> tupl = ('key', ['word1', 'word2', 'word3'])  
>>> [(tupl[0], tupl[1][i]) for i in range(len(tupl[1]))]
[('key', 'word1'), ('key', 'word2'), ('key', 'word3')]

您可以使用flatMap() 将此解决方案应用于您的rdd

myrdd = sc.parallelize([('key', ['word1', 'word2', 'word3'])])
myrdd.flatMap(lambda tupl: [(tupl[0], tupl[1][i]) for i in range(len(tupl[1]))]).collect()
#[('key', 'word1'), ('key', 'word2'), ('key', 'word3')]

【讨论】:

    【解决方案2】:

    使用列表理解:

    key, list_ = ('key', ['word1', 'word2', 'word3'])
    result = [(key, item) for item in list_]
    print(result)
    

    输出:

    [('key', 'word1'), ('key', 'word2'), ('key', 'word3')]
    

    您可以使用flatMap() 将此解决方案应用于您的rdd

    myrdd = sc.parallelize([('key', ['word1', 'word2', 'word3'])])
    myrdd.flatMap(lambda row: [(row[0], item) for item in row[1]]).collect()
    #[('key', 'word1'), ('key', 'word2'), ('key', 'word3')]
    

    【讨论】:

      猜你喜欢
      • 2021-12-09
      • 1970-01-01
      • 2019-10-12
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 2021-11-10
      相关资源
      最近更新 更多