2016-05-30 4 views
0

私はpyspark環境で働いていると私は aとb、Pythonで2つのネストされたリストの各要素の交点を取得する方法は?

a=[[1,2,3],[8,9,45,0,65],[3,7,23,88],[44,77,99,100,654]] 
b=[[1,3,7],[0,9,67,22,45,8,11],[23,3],[100]] 

2ネストされたリストを持っている場合、私はpythonの

intersection_list=[[1,3],[8,9,45,0],[3,23],[100]] 

におけるこれら二つの交点と最終カウントをしたいですこれは

list_count=[2,3,2,1] 

どのようにpysparkでこの結果を得るのですか?

pyparkにもRDDでこれを行うにはどのような方法があります私は

[[[n for n in a if n in b]for x in a]for y in b] 

を試してみましたが、このdid'tは私が

intersection_list を必要与えましたか?

答えて

1
[[n for n in x if n in y] for x, y in zip(a, b)] 

しかしサブリストが大きい場合は、この方がよいでしょう。これは、リストではなく、RDDSで動作します

[set(x).intersection(y) for x, y in zip(a, b)] 

(要素の順序が失われたが)

+0

。私はここに示したテクニックを使って調整することができます:http://stackoverflow.com/q/32084368/1560062 – zero323

+0

以下のコードはこのエラーをpysparkに投げています トレースバック(最新のコール最後): ファイル "" 'PipelinedRDD' オブジェクトは、このコードはpysparkで指定されたエラーを投げている –

1
a=[[1,2,3],[8,9,45,0,65],[3,7,23,88],[44,77,99,100,654]] 
b=[[1,3,7],[0,9,67,22,45,8,11],[23,3],[100]] 

intersection_list = [list(set(x) & set(y)) for x, y in zip(a,b)] 

>> [[1, 3], [8, 9, 45, 0], [3, 23], [100]] 

list_count = [ len(x) for x in intersection_list ] 

>> [2, 4, 2, 1] 
+0

呼び出すことはできません: トレースバック(最新の呼び出しの最後): TypeError例外で ファイル ""、行1、: TypeError例外ではライン1、 'PipelinedRDD'オブジェクトは呼び出し可能ではありません –