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)')
Run Code Online (Sandbox Code Playgroud)
问题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]
Run Code Online (Sandbox Code Playgroud)
然而,它会导致昂贵的洗牌.
逻辑很简单:在id字段上保持与filter_df的连接并检查filter_df是否为null - 如果它为null,则表示filter_df中没有这样的行
| 归档时间: |
|
| 查看次数: |
12730 次 |
| 最近记录: |