2017-10-01 5 views
2

Angenommen, ich habe habe eine Liste von Schlüssel-Wert-Paaren erstellen:Wie Spark-Reihe aus der Liste der Schlüssel-Wert-Paare

kvs = [('x', 0), ('a', 1)] 

Jetzt habe ich mit der gleichen Reihenfolge einen Funken von kvs erstellen möchte von Schlüsseln wie in kvs.
Wie geht das in Python?

+0

konvertieren ich zu dict und verwenden Row (** kvs) – Harry

+0

Es behält nicht die Reihenfolge der Paare. – Michael

+0

können Sie OrderedDict verwenden https://StackOverflow.com/Questions/38253385/building-a-row-from-a-dict-in-pyspark – Harry

Antwort

1

Ich habe es noch nicht ausgeführt, aber können Sie überprüfen, sobald ich nach dem Ausführen bearbeiten werde, wenn fehlschlägt.

from pyspark.sql import Row 
kvs = [('x', 0), ('a', 1)] 
h = {} 
[h.update({k:v}) for k,v in kvs] 
row = Row(**h) 
+0

Danke, aber es behält nicht die Reihenfolge der Paare in 'kvs', – Michael

+0

Überprüfen Sie, wie Sie die Bestellung mit OrderedDict https://StackOverflow.com/questions/38253385/building-a-row-from-a-dict-in-pypspark erhalten – Harry

1

Sie können:

from pyspark.sql import Row 

Row(*[k for k, _ in kvs])(*[v for _, v in kvs]) 

aber meiner Meinung nach ist es besser, haupt zu vermeiden. Abgesehen davon, dass es sich um eine praktische Klasse zur Darstellung lokaler Werte handelt, die vom JVM-Backend abgerufen werden, hat es in Spark keine besondere Bedeutung. In fast jedem Zusammenhang:

tuple(v for _, v in kvs) 

ist tadellos gültiger Wiedereinbau für .