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...
InformationsquelleAutor mar tin | 2016-04-19
Schreibe einen Kommentar