2017-10-01 5 views
0

私はSparkのMllib(以下とは異なる/関連しない処理)を使用する必要がありますが、私がしたいことを達成する他の方法があれば行う。pysparkのタプルでマップを実行する

私はこのようなデータ...私は両方でzipWithIndexを使用した後、私は2つの異なるリストに加わりました

[(0, ([7, 6, 1, 4, 5, 4, 4, 3, 7, 0], [2])), (8, ([7, 4, 8, 2, 2, 0, 2, 6, 4, 0], [7])) 

を持っています。

Iがあることが、上記の処理したい...

接合ジップ指標値がキーであり、値が唯一の要素を持つ最初のリストの各要素の積である
[(0, 7 * 2), (0, 6 * 2), (0, 1 * 2) ... etc 

2番目のリストに表示されます。

これは実行可能なものでしょうか?

答えて

2

あなたはflatMapを使用し、各要素について、タプルのリストを返すことができます。

rdd.flatMap(lambda x: [(x[0], i * x[1][1][0]) for i in x[1][0]]).collect() 

# [(0, 14), (0, 12), (0, 2), (0, 8), (0, 10), (0, 8), (0, 8), (0, 6), (0, 14), (0, 0), (8, 49), (8, 28), (8, 56), (8, 14), (8, 14), (8, 0), (8, 14), (8, 42), (8, 28), (8, 0)] 

この明確には、マッピングのための通常の方法を書くようにするには:特に

def list_mul(t): 
    k, (l1, l2) = t 
    return [(k, i*l2[0]) for i in l1] 

rdd.flatMap(list_mul).collect() 
# [(0, 14), (0, 12), (0, 2), (0, 8), (0, 10), (0, 8), (0, 8), (0, 6), (0, 14), (0, 0), (8, 49), (8, 28), (8, 56), (8, 14), (8, 14), (8, 0), (8, 14), (8, 42), (8, 28), (8, 0)] 
+1

感謝機能で手の込んだ! – cpd1

関連する問題