Nicht sicher, warum ich eine schwierige Zeit mit diesem habe, scheint es so einfach, wenn man bedenkt, es ist ziemlich einfach in R oder Pandas zu tun. Ich wollte jedoch Pandas vermeiden, da ich mit vielen Daten zu tun habe, und ich glaube, toPandas()
lädt alle Daten in den Speicher des Treibers in pyspark.Pyspark-Filter Datenrahmen von Spalten eines anderen Datenrahmens
Ich habe 2 Datenrahmen: df1
und df2
. Ich möchte df1
filtern (alle Zeilen entfernen), wobei df1.userid = df2.userid
AND df1.group = df2.group
. Ich war nicht sicher, ob ich filter()
, join()
oder sql
Zum Beispiel verwenden soll:
df1:
+------+----------+--------------------+
|userid| group | all_picks |
+------+----------+--------------------+
| 348| 2|[225, 2235, 2225] |
| 567| 1|[1110, 1150] |
| 595| 1|[1150, 1150, 1150] |
| 580| 2|[2240, 2225] |
| 448| 1|[1130] |
+------+----------+--------------------+
df2:
+------+----------+---------+
|userid| group | pick |
+------+----------+---------+
| 348| 2| 2270|
| 595| 1| 2125|
+------+----------+---------+
Result I want:
+------+----------+--------------------+
|userid| group | all_picks |
+------+----------+--------------------+
| 567| 1|[1110, 1150] |
| 580| 2|[2240, 2225] |
| 448| 1|[1130] |
+------+----------+--------------------+
EDIT: Ich habe versucht, viele join() und filter() Funktionen, ich glaube, die nächste, die ich bekam, war:
cond = [df1.userid == df2.userid, df2.group == df2.group]
df1.join(df2, cond, 'left_outer').select(df1.userid, df1.group, df1.all_picks) # Result has 7 rows
ich habe versucht, eine Reihe von verschiedenen Arten kommen, und ich habe auch versucht, verschiedene cond
Werte: cond = ((df1.userid == df2.userid) & (df2.group == df2.group)) # Ergebnis hat 7 Zeilen cond = ((df1.use rid! = df2.userid) & (df2.group! = df2.group)) # Ergebnis hat 2 Zeilen
Es scheint jedoch so, als würden die Joins zusätzliche Zeilen hinzufügen, anstatt zu löschen.
Ich verwende python 2.7
und spark 2.1.0
Haben Sie versucht, beitreten? – eliasah
@eliasah Ja, ich habe alle möglichen Dinge versucht, einschließlich Join, Filter und SQL-Abfragen. Ich entschuldige mich dafür, dass ich meinen Code nicht gepostet habe und was ich versucht habe, ich weiß, das ist nicht fair. Der Grund, warum ich das nicht getan habe, ist, weil ich so viele Dinge ausprobiert habe, und auch, weil ich meine Frage vereinfacht habe. Lassen Sie mich die Frage bearbeiten und zeigen, was ich versucht habe. – drewyupdrew