Tw *_*Nus 8 apache-spark apache-spark-sql pyspark pyspark-sql
我有一个"大"数据集(huge_df),其中包含> 20列.其中一列是一个id字段(由生成pyspark.sql.functions.monotonically_increasing_id()).
使用一些标准,我生成第二个数据帧(filter_df),包含id我想稍后过滤的值huge_df.
目前我使用SQL语法来执行此操作:
filter_df.createOrReplaceTempView('filter_view')
huge_df = huge_df.where('id NOT IN (SELECT id FROM filter_view)')
问题1: 
有没有办法只使用Python,即无需注册TempView?
问题2: 是否有完全不同的方法来完成同样的事情?
你可以使用JOIN
huge_df = huge_df.join(filter_df, huge_df.id == filter_df.id, "left_outer")
                 .where(filter_df.id.isNull())
                 .select([col(c) for c in huge_df.columns]
然而,它会导致昂贵的洗牌.
逻辑很简单:在id字段上保持与filter_df的连接并检查filter_df是否为null - 如果它为null,则表示filter_df中没有这样的行
| 归档时间: | 
 | 
| 查看次数: | 12730 次 | 
| 最近记录: |