Не уверен, почему у меня с этим трудное время, кажется, это так просто, потому что это довольно легко сделать в R или пандах. Я хотел избежать использования панд, хотя, поскольку я имею дело с большим количеством данных, и я считаю, что toPandas()
загружает все данные в память водителя в pyspark.Паттерн данных фильтра Pyspark по столбцам другого информационного кадра
У меня есть 2 блока данных: df1
и df2
. Я хочу фильтровать df1
(удалить все строки), где df1.userid = df2.userid
И df1.group = df2.group
. Я не был уверен, если я должен использовать filter()
, join()
или sql
Например:
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: Я пробовал много присоединиться() и фильтр() функции, я считаю, что ближе я получил:
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
Я перепробовал кучу разных типов присоединиться, и я также пробовал различные cond
значения: конд = ((df1.userid == df2.userid) & (df2.group == df2.group)) # result имеет 7 строк cond = ((df1.userid! = df2.u serid) & (df2.group! = df2.group)) # result имеет 2 ряда
Однако похоже, что соединения добавляют дополнительные строки, а не удаляют.
Я использую python 2.7
и spark 2.1.0
Вы попробовали присоединиться? – eliasah
@eliasah Да, я пробовал всевозможные вещи, включая соединения, фильтрацию и sql-запросы. Я прошу прощения за то, что не отправлял мой код и что я пытался, я знаю, что это несправедливо. Причина, почему я этого не сделал, потому что я пробовал так много вещей, а также потому, что упростил свой вопрос. Позвольте мне изменить вопрос и показать, что я пробовал. – drewyupdrew