У меня есть большой DataFrame с примерно 1 миллиардом строк и примерно 15 столбцами.
| country| city | date | ...|
+--------+-------+-----------+----+
| France| Paris| 2018-07-01| ...|
| Spain| Madrid| 2017-06-01| ...|
И у меня есть DataFrame меньшего размера, который содержит даты для фильтрации на основе комбинации (страна, город) - примерно 50 строк.
| country| city | filter_date |
+--------+-------+-------------+
| France| Paris| 2018-07-01 |
| Spain| Madrid| 2017-06-01 |
Я хотел бы отфильтровать большой DataFrame по дате, используя filter_date, хранящийся в маленьком DataFrame для данной комбинации - например, удалить все строки, которые содержат (Франция, Париж) и находятся перед the 2018-07-01, et c ...
Решение, которое я изначально имел в виду, заключалось в том, чтобы просто выполнить левое соединение, а затем отфильтровать, например:
df = df_large.join(df_small, on=['country', 'city'], how='left').filter(f.col('date') >= c.col('filter_date'))
Однако это решение не идеально, поскольку левое соединение очень дорогое, а мой DataFrame слишком большой. При выполнении действия после этой операции выполнение кода занимает очень много времени.