2016-09-24 59 views
0

我對Spark有點新,我正在嘗試做一個簡單的映射。
我的數據是這樣的:獲取一個元組的第一個項目在每個列表中的每一行pyspark

RDD((0, list(tuples)), ..., (19, list(tuples)) 

我想要做的就是抓住每個元組的第一個項目,所以最終是這樣的:

RDD((0, list(first item of each tuple),..., (19, list(first item of each tuple)) 

有人能幫助我如何來映射這個?
我會感激!

回答

2

您可以使用mapValues到元組的列表轉換爲元組[0]的列表:

rdd.mapValues(lambda x: [t[0] for t in x]) 
+0

啊,是的,這是完全意義上的。非常感謝@AChampion –

1

像這樣的東西?

kv這裏的含義是「鍵值」和映射itemgetter的值。因此,一個map :-)

from operator import itemgetter 
rdd = sc.parallelize([(0, [(0,'a'), (1,'b'), (2,'c')]), (1, [(3,'x'), (5,'y'), (6,'z')])]) 
mapped = rdd.mapValues(lambda v: map(itemgetter(0), v)) 

輸出中map

mapped.collect() 
[(0, [0, 1, 2]), (1, [3, 5, 6])] 
+0

我相信OP表示這個列表是一個元組列表... – AChampion

+0

不要這麼想,因爲這隻會返回列表中的第一項,而不是列表中每個元組的第一項 - 您ld需要'(kv [0],[a [0]爲in kv [1]])'但是由於你只是影響了你可以使用'mapValues()'來簡化的值 – AChampion

+0

@ cricket_007我試過你說的已經,它只是給了我每個元組中的第一個元組。 –

相關問題