Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据小数据帧中的信息过滤大数据帧_Python_Dataframe_Pyspark - Fatal编程技术网

Python 根据小数据帧中的信息过滤大数据帧

Python 根据小数据帧中的信息过滤大数据帧,python,dataframe,pyspark,Python,Dataframe,Pyspark,我有一个大约10亿行和15列的大型数据框 | country| city | date | ...| +--------+-------+-----------+----+ | France| Paris| 2018-07-01| ...| | Spain| Madrid| 2017-06-01| ...| 我有一个较小的数据框,其中包含根据组合(国家、城市)筛选的日期,大约50行 | country| city | filter_date | +--------+---

我有一个大约10亿行和15列的大型数据框

| country|  city | date      | ...|
+--------+-------+-----------+----+
|  France|  Paris| 2018-07-01| ...|
|   Spain| Madrid| 2017-06-01| ...|
我有一个较小的数据框,其中包含根据组合(国家、城市)筛选的日期,大约50行

| country|  city | filter_date |
+--------+-------+-------------+
|  France|  Paris| 2018-07-01  |
|   Spain| Madrid| 2017-06-01  |
我想使用存储在给定组合的小数据框中的筛选器_日期按日期筛选大数据框-例如,删除包含(法国、巴黎)且在2018-07-01之前的任何行,等等

我最初想到的解决方案只是进行左连接,然后进行过滤,例如:

df = df_large.join(df_small, on=['country', 'city'], how='left').filter(f.col('date') >= c.col('filter_date'))

但是这个解决方案并不理想,因为左连接非常昂贵,而且我的数据帧太大。执行此操作后执行操作时,代码需要很长时间才能运行。

尝试
左半部分
加入+
广播
较小的df。还可以使用
组合所有过滤器,如下所示-

df_large.join(广播(df_small),df_large(“国家”)==df_small(“国家”)&&
df_large(“城市”)==df_small(“城市”)和&df_large(“日期”)>=df_small(“筛选日期”),“leftsemi”)

我相信它应该只有2个等于'=='而不是'==',对吗?在pyspark中是的,就像
一样。join(department,people.deptId==department.id)
其中people和department是dfs==返回一个布尔值===返回一列(其中包含两列元素的比较结果)