2016-05-30 2 views
0

Ich bin in pyspark Umgebung arbeiten und wenn ich zwei verschachtelte Listen a und b,Wie Schnitt von jedem Element von zwei verschachtelten Listen in Python erhalten?

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]] 

und ich möchte den Schnittpunkt dieser beiden in Python

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

und die Endzahl davon

list_count=[2,3,2,1] 

wie bekomme ich diese ergebnisse in pyspark?

Ich habe

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

aber did't gab mir intersection_list erforderlich in pypark

Gibt es eine Möglichkeit, dies auch mit rdd zu tun?

Antwort

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

jedoch, wenn die Sublisten groß sind dies wäre besser:

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

(obwohl die Reihenfolge der Elemente ist verloren)

+0

Diese mit Listen arbeiten, aber nicht mit RDDs. Sie können es mit den hier gezeigten Techniken anpassen: http://stackoverflow.com/q/32084368/1560062 – zero323

+0

der unten geschriebene Code wirft diesen Fehler in pyspark Traceback (zuletzt letzten Aufruf): Datei "", Linie 1, in Typeerror: 'PipelinedRDD' Objekt nicht aufrufbar –

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

dieser Code wird die angegebenen Fehler in pyspark werfen: Traceback (jüngste Aufforderung zuletzt): File "" Linie 1 in Typeerror: Das Objekt 'PipelinedRDD' kann nicht aufgerufen werden –

Verwandte Themen