【问题标题】:Create an RDD with more elements than its source创建一个元素比源多的 RDD
【发布时间】:2017-01-07 09:09:26
【问题描述】:

我有一个名为 codes 的 RDD,它是一对,第一半有一个字符串,第二半是另一对:

In [76]: codes.collect()
Out[76]: 
[(u'3362336966', (6208, 5320)),
 (u'7889466042', (4140, 5268))]

我正在努力做到这一点:

In [76]: codes.collect()
Out[76]: 
[(u'3362336966', 6208),
 (u'3362336966', 5320),
 (u'7889466042', 4140),
 (u'7889466042', 5268)]

如何做到这一点?


我的失败尝试:

In [77]: codes_in = codes.map(lambda x: (x[0], x[1][0]), (x[0], x[1][1]))
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-77-e1c7925bc075> in <module>()
----> 1 codes_in = codes.map(lambda x: (x[0], x[1][0]), (x[0], x[1][1]))

NameError: name 'x' is not defined

【问题讨论】:

    标签: python apache-spark rdd distributed-computing bigdata


    【解决方案1】:

    我认为您想要的是以下内容:

    codes_in = codes.map(lambda x: [(x[0], p) for p in x[1]]).flatMap(lambda x: x)
    

    如果是 python 2,为了便于阅读,您可以:

    codes_in = codes.map(lambda k, vs: [(k, v) for v in vs]).flatMap(lambda x: x)
    

    通过这种方式,您将能够“提取”与键关联的每个值,并强制每一行都是(k, v) 形式的记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      相关资源
      最近更新 更多