Ich versuche, eine Zeile in pySpark 1.6.1 dynamisch zu erstellen, und dann in einen Datenrahmen zu bauen. Die allgemeine Idee besteht darin, die Ergebnisse von describe
so auszudehnen, dass sie beispielsweise Skew und Kurtosis einschließt. Hier ist, was ich dachte funktionieren sollte:Erstellen einer Zeile aus einem Diktat in pySpark
from pyspark.sql import Row
row_dict = {'C0': -1.1990072635132698,
'C3': 0.12605772684660232,
'C4': 0.5760856026559944,
'C5': 0.1951877800894315,
'C6': 24.72378589441825,
'summary': 'kurtosis'}
new_row = Row(row_dict)
Aber das gibt TypeError: sequence item 0: expected string, dict found
die eine ziemlich klare Fehler. Dann fand ich, dass, wenn ich die Zeile Felder zuerst definiert sind, ein dict verwenden:
r = Row('summary', 'C0', 'C3', 'C4', 'C5', 'C6')
r(row_dict)
> Row(summary={'summary': 'kurtosis', 'C3': 0.12605772684660232, 'C0': -1.1990072635132698, 'C6': 24.72378589441825, 'C5': 0.1951877800894315, 'C4': 0.5760856026559944})
die einen feinen Schritt sein würde, es sei denn es scheint nicht, wie ich dynamisch die Felder in angeben können. Ich brauche das für eine unbekannte Anzahl von Zeilen mit unbekannten Namen. Gemäß der Dokumentation können Sie tatsächlich in die andere Richtung gehen:
>>> Row(name="Alice", age=11).asDict() == {'name': 'Alice', 'age': 11}
True
So scheint es, wie ich in der Lage sein sollte, dies zu tun. Es scheint auch, dass einige veraltete Features von älteren Versionen, die dies erlaubt, zum Beispiel here. Gibt es ein aktuelleres Äquivalent, das ich vermisse?
Ist das von einer bestimmten Version von Python gültig oder ist es eine allgemeine Regel? Der Grund, warum ich frage, ist aufgrund Ihrer [letzten Bearbeitung] (https://stackoverflow.com/posts/38253641/revisions). – eliasah
@eliasah Da Spark immer intern sortiert, ist es egal, was wir vorher machen. Und bei der JIRA-Diskussion wird sich nichts ändern, bis Spark die Unterstützung für Python <3.6 (in absehbarer Zeit nicht mehr) fallen lässt. 'OrderedDict' war ein bisschen irreführend, daher habe ich es entfernt. – zero323
Ok danke! Das war der Ursprung meiner Verwirrung. – eliasah