创建一个元素多于源的 RDD
Create an RDD with more elements than its source
我有一个名为 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
我想你想要的是:
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)
通过这种方式,您将能够 "extract" 与键关联的每个值,并强制每一行都是 (k, v)
.
形式的记录
我有一个名为 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
我想你想要的是:
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)
通过这种方式,您将能够 "extract" 与键关联的每个值,并强制每一行都是 (k, v)
.