2016-08-30 3 views
0

Ich habe eine RDD codes genannt, die ein Paar ist, die einen String als erste Hälfte und ein anderes Paar als seine zweite Hälfte hat:Eine RDD mit mehr Elementen als seine Quelle

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

und ich bin versuchen, dies zu bekommen:

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

Wie geht das?


Mein gescheiterter Versuch:

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 

Antwort

1

Ich denke, was Sie wollen, ist die folgende:

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

Wenn es Python 2, könnten Sie für die Lesbarkeit ist:

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

Auf diese Weise können Sie "extr act "jeden Wert, der dem Schlüssel zugeordnet ist, und erzwinge, dass jede Zeile ein Datensatz des Formulars (k, v) ist.