【发布时间】:2022-01-12 12:42:47
【问题描述】:
我想知道哪个在 spark 中最有效地获得低于 4 帧
- df1 - left_anti
- df2 - left_semi
- df3 - right_anti
- df4 - right_semi
方法 1:(连接 - 1,过滤器 - 4)
merged_df = left_df.join(right_df, join_condition, how='full_outer')
df1 = merged_df.filter(sf.col('right_df.col1').isNull()).select('left_df.*')
df2 = merged_df.filter(sf.col('right_df.col1').isNotNull()).select('left_df.*')
df3 = merged_df.filter(sf.col('left_df.col1').isNull()).select('right_df.*')
df4 = merged_df.filter(sf.col('left_df.col1').isNotNull()).select('right_df.*')
方法 2:(连接 - 4,过滤器 - 0)
df1 = left_df.join(right_df, join_condition, how='left_anti')
df2 = left_df.join(right_df, join_condition, how='left_semi')
df3 = left_df.join(right_df, join_condition, how='right_anti')
df4 = left_df.join(right_df, join_condition, how='right_semi')
和
join_condition = (sf.col('left_df.col1') = sf.col('right_df.col1'))
上面提到的哪种机制是有效的?
参考:https://medium.com/bild-journal/pyspark-joins-explained-9c4fba124839
编辑
将col1 视为两个数据帧中的主键列(即不可为空)。
【问题讨论】:
-
这将取决于您接下来打算做什么(采取什么行动)。截至目前,1 和 2 都只产生 4 个执行计划。
-
我想对所有 4 个执行相同的操作.. 假设写入 hdfs 位置
标签: apache-spark pyspark apache-spark-sql