Summe Betrieb auf PySpark DataFrame geben TypeError, wenn der Typ in Ordnung ist
Habe ich solche DataFrame in PySpark (dies ist das Ergebnis eines nehmen(3) das dataframe ist sehr groß):
sc = SparkContext()
df = [Row(owner=u'u1', a_d=0.1), Row(owner=u'u2', a_d=0.0), Row(owner=u'u1', a_d=0.3)]
den gleichen Besitzer mehr Zeilen. Was ich tun müssen, ist die Summe der Werte des Feldes a_d pro Eigentümer nach der Gruppierung, wie
b = df.groupBy('owner').agg(sum('a_d').alias('a_d_sum'))
aber dieser Fehler
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Jedoch das schema enthält double-Werte, keine Zeichenfolgen (dies geht aus einer printSchema()):
root
|-- owner: string (nullable = true)
|-- a_d: double (nullable = true)
Also, was ist hier passiert?
- sind Sie sicher, dass alle Ihre Leitungen sind in Ordnung? Ich meine, haben Sie überprüfen, dass alle Zeilen ein gültiges a_d Wert?
- die a_d Feld kommt aus einer Multiplikation von zwei Doppel-Spalten in einer anderen dataframe, sehe ich keine Möglichkeit, es könnte ein string sein. Gibt es eine Möglichkeit, ich könnte das überprüfen?
- Sie können etwas tun, wie den zugrunde liegenden RDD und filtern es mit einem RegExp auf den Bereich a_d.... Oder schreiben Sie das Ergebnis in eine Hive-Tabelle und suchen für Null-Werte in dieser Spalte Lesen Sie es durch, Hive... Oder wenn Sie eine Teilmenge der wenigen Daten, die zeigt, diesem problem kann man sich auch ansehen...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie verwenden nicht das korrekte sum-Funktion, aber die
built-in
Funktionsum
(standardmäßig).Also der Grund, warum die
build-in
Funktion nicht funktionieren wirddas ist, dauert es eine iterierbar als argument, wo wie hier der name der Spalte übergeben wird ein string, und der
built-in
- Funktion kann nicht angewendet werden auf eine Schnur. Ref. Python-Offizielle Dokumentation.Müssen Sie importieren Sie die ordnungsgemäße Funktion von
pyspark.sql.functions
:sum
in Ihrem pyspark und update mit dem Ausgang hier ?