Ich versuche zu verstehen, derzeit, wie RDD funktioniert. Zum Beispiel möchte ich die Zeilen basierend auf dem Kontext in einem RDD-Objekt zählen. Ich habe einige experince mit Datenrahmen und meinen Code für DF, die A
beispielsweise Spalten, B
und wahrscheinlich einige andere Spalten, sucht wie:zählen Sie die Zeilen in RDD abhängig von den Linien Kontext, pyspark
df = sqlContext.read.json("filepath")
df2 = df.groupBy(['A', 'B']).count()
Der logische Teil dieses Codes ist für mich klar - ich tun groupBy
Operation über Spaltenname in DF. In RDD habe ich keinen Spaltennamen, nur ähnliche Zeilen, die ein Tupel oder ein Zeilenobjekt sein könnten ... Wie kann ich ähnliche Tupel zählen und sie als Integer zur eindeutigen Zeile hinzufügen? Zum Beispiel meines erster Code:
df = sqlContext.read.json("filepath")
rddob = df.rdd.map(lambda line:(line.A, line.B))
ich die Karte Operation tun und ein Tupel der Werte aus den Tasten A
und B
erstellen. Die eindeutige Zeile hat keine Schlüssel mehr (dies ist der wichtigste Unterschied zum DataFrame, der den Spaltennamen hat). Jetzt kann ich so etwas produzieren, aber es berechnet nur eine Gesamtanzahl von Zeilen in RDD.
rddcalc = rddob.distinct().count()
Was ich für meine Ausgabe wollen, ist nur:
((a1, b1), 2)
((a2, b2), 3)
((a2, b3), 1)
...
PS
ich meine persönliche Lösung für diese Frage gefunden zu haben. Hier: rdd ist initial rdd, rddlist ist eine Liste aller Zeilen, rddmod ist eine final modifizierte rdd und folglich die Lösung.
rddlist = rdd.map(lambda line:(line.A, line.B)).map(lambda line: (line, 1)).countByKey().items()
rddmod = sc.parallelize(rddlist)
In der Tat wird 'groupBy' nicht empfohlen, da das Mischen der Partitionen erforderlich ist, wodurch viele Daten zwischen allen Knoten verschoben werden. –
@ Alberto Bonsanto, vielen Dank für das Interesse an diesem Thema. Ich denke nicht, dass groupBy für DF gefährlich ist und für RDD existiert es nicht. – Guforu
Nun können Sie einige Gründe finden, die von * Databricks * hier erklärt werden [Prefer reduceByKey über groupByKey] (https://databricks.gitbooks.io/databricks-spark-knowledge-base/content/best_practices/prefer_reducebykey_over_groupbykey.html) –