在连接中广播左表

2023-12-29

这是我的加入:

df = df_small.join(df_big, 'id', 'leftanti')

它似乎我只能广播正确的数据帧 https://stackoverflow.com/questions/62735494/broadcast-join-in-spark-not-working-for-left-outer。但为了让我的逻辑发挥作用(左反连接),我必须有我的df_small在左侧。

如何广播左侧的数据帧?


Example:

from pyspark.sql import SparkSession, functions as F
spark = SparkSession.builder.getOrCreate()

df_small = spark.range(2)
df_big = spark.range(1, 5000000)

#    df_small     df_big
#    +---+        +-------+
#    | id|        |     id|
#    +---+        +-------+
#    |  0|        |      1|
#    |  1|        |      2|
#    +---+        |    ...|
#                 |4999999|
#                 +-------+

df_small = F.broadcast(df_small)
df = df_small.join(df_big, 'id', 'leftanti')
df.show()
df.explain()

#    +---+
#    | id|
#    +---+
#    |  0|
#    +---+
#
#    == Physical Plan ==
#    AdaptiveSparkPlan isFinalPlan=false
#    +- SortMergeJoin [id#197L], [id#199L], LeftAnti
#       :- Sort [id#197L ASC NULLS FIRST], false, 0
#       :  +- Exchange hashpartitioning(id#197L, 200), ENSURE_REQUIREMENTS, [id=#1406]
#       :     +- Range (0, 2, step=1, splits=2)
#       +- Sort [id#199L ASC NULLS FIRST], false, 0
#          +- Exchange hashpartitioning(id#199L, 200), ENSURE_REQUIREMENTS, [id=#1407]
#             +- Range (1, 5000000, step=1, splits=2)

不幸的是这是不可能的。

Spark 只能为右外连接广播左侧表。

您可以通过将左反分为 2 个连接(即内连接和左连接)来获得所需的结果。

df1 = spark.createDataFrame([1, 2, 3, 4, 5], IntegerType())
df2 = spark.createDataFrame([(1, 'a'), (2, 'b')], ['value', 'col'])
inner = df1.join(broadcast(df2), 'value', 'inner')
out = df1.join(broadcast(inner), 'value', 'left').where(col('col').isNull()).drop('col')
out.show()
+-----+
|value|
+-----+
|    3|
|    4|
|    5|
+-----+

df1.join(df2, 'value', 'left_anti').show()
+-----+
|value|
+-----+
|    5|
|    3|
|    4|
+-----+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在连接中广播左表 的相关文章

随机推荐

  • CXF BusException 命名空间没有 DestinationFactory http://cxf.apache.org/transports/http

    我正在尝试支持 basic cxf rs example 1 但使用我自己的服务impl这更简单 我的所有方法都返回字符串 当我尝试运行该服务器时 出现此异常 我建立了一个干净的项目 所以我要重新开始 大师 pom http maven a
  • StemDocument R 文本挖掘

    我的数据是一个txt文件 如下所示 字数 doc概述1客户1 store 1 marge 1 price 2 stock 2经济学2 文档的编号已排序 从最小到最大 现在我想要每个文档属于该文档的所有单词 现在它们站在一列中 但我想要文本文
  • 我应该使用一个大的 SQL Select 语句还是几个小的 SQL Select 语句?

    我正在使用从 MySQL 发送的数据构建一个 PHP 页面 是不是更好有 1 SELECT具有 4 个表连接的查询 或者 4 small SELECT没有表连接的查询 我确实从 ID 中选择 哪种方法更快 每种方法的优缺点是什么 我只需要每
  • 导入二维数据的 Python 和内存高效方法

    我正在尝试运行一些使用 Python 分析数据的脚本 我很快就对它占用的 RAM 空间感到惊讶 我的脚本从文件中读取两列整数 它通过以下方式导入它 import numpy as N from sys import argv infile
  • Antd - 有没有办法改变卡片标题的背景颜色?

    通过添加 style 属性 我只能更改 Card 组件主体部分的颜色 我怎样才能更改标题部分
  • 我是否需要内存屏障来访问已完成的线程修改的内存?

    以下为 C 术语 我有一个线程 A 和线程 B 共享对整数值 P 的访问 线程 A 初始化该值并在运行时更新它 然后线程A完成 线程 B 等待线程 A 完成 标准操作系统 API 调用 无论使用什么操作系统 并想要读取 P 线程 B 是否需
  • MySQL 更新并从另一个表中选择

    我有3张桌子 Kommuner 和 Fylker 公司 公司表有一个空字段forretningsadresse fylke但另一个领域forretningsadresse kommune有一个值 所以基本上 我需要填写forretnings
  • 表与两个相关表的总和

    我在这里提出这个 我确信是 简单的问题 我不知道如何解决 我有这个架构 有了这个数据 我的预期结果是 对于 约翰 纳什 PERSON NAME TOTAL FRUIT TOTAL COOKIE JOHN NASH 10 38 对于 奥斯卡
  • 包装一个对象

    我有一个对象 它有一堆公共属性 没有 getter 和 setter 坏的 因此 我创建了一个包含属性的类 并为它们创建了 getter 和 setter 我的计划是将对象包装在我的类中 因此这意味着不能直接访问属性 我有点不确定该怎么做
  • 如何在 Web Api 操作中锁定长异步调用?

    我有这样的场景 我有一个 WebApi 和一个端点 触发时会执行大量工作 大约 2 5 分钟 这是一个具有副作用的 POST 端点 我想限制执行 以便如果向此端点发送 2 个请求 不应该发生 但安全总比遗憾更好 其中一个请求将必须等待以避免
  • Android手机与穿戴模块之间共享文件

    几个月前 我最初只使用移动模块开始我的项目 现在我也有兴趣为可穿戴设备配置我的应用程序 也就是说 我的所有文件 Java XML drawables 等 都在移动模块中 所以我是否需要将我想要在移动模块和可穿戴模块之间共享的所有文件传输到新
  • 如何获取 Tensorflow seq2seq 嵌入输出

    我正在尝试使用张量流训练序列到序列模型 并一直在查看他们的示例代码 我希望能够访问编码器创建的向量嵌入 因为它们似乎具有一些有趣的属性 然而 我真的不清楚这是怎么回事 在单词的向量表示示例中 他们详细讨论了这些嵌入的用途 但似乎没有提供访问
  • 如何在开发机器上使用ansible模板本地创建文件

    我从 ansible 开始 正在寻找一种方法来使用 ansible 剧本在服务器和本地环境上创建样板项目 我想在本地使用 ansible 模板来创建一些通用文件 但是我如何使用ansible在本地执行某些操作呢 我读了一些 local ac
  • SSRS 报告每个参数值的重复表

    大家对这里的一般性问题感到抱歉 但我一直在互联网上查找 但找不到解决方案 我有一份 SSRS 报告 在运行之前用户必须输入一个参数 Location 在查询中 指定仅返回该位置匹配的结果 IE where Company location
  • 在reactjs中切换下拉菜单

    我的导航栏上有一个简单的下拉菜单的以下代码 https jsfiddle net jL3yyk98 10 https jsfiddle net jL3yyk98 10 索引 html div div 导航菜单 js var NavMenu
  • Polymer:在纸张按钮按“确定”后获取纸张对话框内的纸张输入值

    我需要在按下 确定 纸张按钮后获取纸张对话框内某些纸张输入字段的值 I have
  • 检查时间是否在某一分钟内的最佳方法是什么?

    我想编写一个简单的 python 脚本 它将检查是否是给定小时 分钟之前的 2 分钟 然后每天或在给定时间的给定日期调用我的函数 该脚本将在 cronjob 中每分钟运行一次 所以执行myfunction 的两种情况 每天 10 55201
  • 如何更改 Tkinter 按钮周围框的颜色?

    我尝试了在 Stackoverflow 上找到的一些东西 例如在按钮周围放置一个框架并为其指定颜色 就像所说的那样here https stackoverflow com questions 53101307 how do i change
  • 两个不常见的PHP运算符一起使用来获取图像像素颜色,请解释

    The PHP 图像颜色 http www php net manual en function imagecolorat php函数可用于获取图像像素的 RGB 值 如文档中所示 im imagecreatefrompng php png
  • 在连接中广播左表

    这是我的加入 df df small join df big id leftanti 它似乎我只能广播正确的数据帧 https stackoverflow com questions 62735494 broadcast join in s