在 Apache Spark Join 中包含空值

2023-11-26

我想在 Apache Spark 连接中包含空值。默认情况下,Spark 不包含带有 null 的行。

这是默认的 Spark 行为。

val numbersDf = Seq(
  ("123"),
  ("456"),
  (null),
  ("")
).toDF("numbers")

val lettersDf = Seq(
  ("123", "abc"),
  ("456", "def"),
  (null, "zzz"),
  ("", "hhh")
).toDF("numbers", "letters")

val joinedDf = numbersDf.join(lettersDf, Seq("numbers"))

这是输出joinedDf.show():

+-------+-------+
|numbers|letters|
+-------+-------+
|    123|    abc|
|    456|    def|
|       |    hhh|
+-------+-------+

这是我想要的输出:

+-------+-------+
|numbers|letters|
+-------+-------+
|    123|    abc|
|    456|    def|
|       |    hhh|
|   null|    zzz|
+-------+-------+

Spark 提供了一种特殊的NULL安全相等运算符:

numbersDf
  .join(lettersDf, numbersDf("numbers") <=> lettersDf("numbers"))
  .drop(lettersDf("numbers"))
+-------+-------+
|numbers|letters|
+-------+-------+
|    123|    abc|
|    456|    def|
|   null|    zzz|
|       |    hhh|
+-------+-------+

请注意不要将其与 Spark 1.5 或更早版本一起使用。在 Spark 1.6 之前,它需要笛卡尔积(SPARK-11111 - 快速空安全连接).

In 火花2.3.0或者稍后你可以使用Column.eqNullSafe in PySpark:

numbers_df = sc.parallelize([
    ("123", ), ("456", ), (None, ), ("", )
]).toDF(["numbers"])

letters_df = sc.parallelize([
    ("123", "abc"), ("456", "def"), (None, "zzz"), ("", "hhh")
]).toDF(["numbers", "letters"])

numbers_df.join(letters_df, numbers_df.numbers.eqNullSafe(letters_df.numbers))
+-------+-------+-------+
|numbers|numbers|letters|
+-------+-------+-------+
|    456|    456|    def|
|   null|   null|    zzz|
|       |       |    hhh|
|    123|    123|    abc|
+-------+-------+-------+

and %<=>% in SparkR:

numbers_df <- createDataFrame(data.frame(numbers = c("123", "456", NA, "")))
letters_df <- createDataFrame(data.frame(
  numbers = c("123", "456", NA, ""),
  letters = c("abc", "def", "zzz", "hhh")
))

head(join(numbers_df, letters_df, numbers_df$numbers %<=>% letters_df$numbers))
  numbers numbers letters
1     456     456     def
2    <NA>    <NA>     zzz
3                     hhh
4     123     123     abc

With SQL (火花2.2.0+) 您可以使用IS NOT DISTINCT FROM:

SELECT * FROM numbers JOIN letters 
ON numbers.numbers IS NOT DISTINCT FROM letters.numbers

这可以与DataFrame还有API:

numbersDf.alias("numbers")
  .join(lettersDf.alias("letters"))
  .where("numbers.numbers IS NOT DISTINCT FROM letters.numbers")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Apache Spark Join 中包含空值 的相关文章

  • pyspark加入多个条件

    我如何指定很多条件 当我使用pyspark时 join 例子 与蜂巢 query select a NUMCNT b NUMCNT as RNUMCNT a POLE b POLE as RPOLE a ACTIVITE b ACTIVIT
  • 如何使用一个命令删除 SQL 数据库中的所有索引?

    那么 如何通过一条命令删除 SQL 数据库中的所有索引呢 我有这个命令可以获取所有 20 个左右的 drop 语句 但是如何从这个 结果集 运行所有这些 drop 语句呢 select from vw drop idnex 给我相同列表的另
  • 无法与重定向器建立连接。确保“sql browser”服务正在运行

    所以我尝试这个 sql server 2012 由于这个错误我无法打开任何 ssis 包 无法与重定向器建立连接 确保 sql browser 服务正在运行 我的 Sql 浏览器肯定正在运行 我尝试在本地服务 本地系统和网络下更改它 仍然没
  • 计算2个日期之间每个日期的记录数

    我必须创建一个查询来返回多轴图表的结果 我需要计算为 2 个日期之间的每个日期创建的 ID 数量 我试过这个 DECLARE StartDate datetime2 7 11 1 2020 EndDate datetime2 7 2 22
  • 针对约 225 万行的单表选择查询的优化技术?

    我有一个在 InnoDB 引擎上运行的 MySQL 表 名为squares大约有 2 250 000 行 表结构如下 squares square id int 7 unsigned NOT NULL ref coord lat doubl
  • Python 相当于 Scala 案例类

    Python 中是否有与 Scala 的 Case Class 等效的东西 就像自动生成分配给字段而无需编写样板的构造函数一样 当前执行此操作的现代方法 从 Python 3 7 开始 是使用数据类 https www python org
  • 总和和不同不会改变结果?

    我是一个新手 试图在这里解决这个问题 到目前为止还没有运气 非常感谢任何帮助 Select Distinct AB agency no ab branch no AS AGENCY BRANCH count AB agency no ab
  • 使用什么框架来引导我的第一个生产 scala 项目?

    我正在第一次涉足 scala 的生产应用程序 该应用程序当前打包为 war 文件 我的计划是创建 scala 编译工件的 jar 文件 并将其添加到 war 文件的 lib 文件夹中 我的增强功能是通过 Jersey 公开的 mysql 支
  • MySQL NOT IN 来自同一个表中的另一列

    我想运行 mysql 查询来选择表中的所有行films其中的值title该列不存在于另一列的所有值中的任何位置 collection 这是我的表格的简化版本 其中包含内容 mysql gt select from films id titl
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • ScalaTest v3:为什么需要实现convertToLegacyEqualizer

    Using 斯卡拉测试3 0 0 http www scalatest org install环境 Scala 2 11 8 sbt 0 13 5 IntelliJ 14 1 4 build sbt 只有 NOTE not using or
  • 随着时间的推移累积(不重叠)——技术?

    我正在尝试找到一种更好的方法来制作水晶报告 其他人的 按组添加不重叠的时间 这显然是一个古老的问题 有没有一种技术可以得到 调整每条记录的 开始 结束 时间 以消除共同 重叠时间 亚组内 使用直接 SQL 尽管我发现我可以执行 CTE 假设
  • SKIP加锁和nowait的区别

    pl sql 中 SKIP 锁定游标和 nowait 游标之间的区别 我认为我找到的这张图片是描述差异的最佳例子 详细说明 http viralpatel net blogs oracle skip locked
  • 在 plpgsql 函数中使用 quote_ident()

    我是创建 plpgsql 函数的新手 我需要一些有关在函数内部执行的动态命令上使用 quote ident 甚至 quote literal 的说明 希望有人能给我一个关于它们如何在函数内部工作的具体解释 TIA 这是一个例子 EXECUT
  • Spark 请求最大计数

    我是 Spark 的初学者 我尝试请求允许我检索最常访问的网页 我的要求如下 mostPopularWebPageDF logDF groupBy webPage agg functions count webPage alias cntW
  • MYSQL:如何在同一查询中联接两个表,两次引用同一个表

    我有两张桌子 我正在尝试将下面的示例两个表与表 1 引用表 2 两次结合起来 例如 如果我查看表 1 组 2 和成员 7 它应该查找表 2 中的 ID 并给出输出 Group Members Name Name 2 7 Blue Dog T
  • Apache Spark 两个 RDD 之间的差异

    假设我有这个示例作业 在带有 Java API 的 Groovy 中 def set1 def set2 0 upto 10 set1 lt lt it 8 upto 20 set2 lt lt it def rdd1 context pa
  • 如何记录来自 Akka (Java) 的所有传入消息

    在 Scala 中 您可以使用 LoggingReceive 包装接收函数 如何通过 Java API 实现相同的目标 def receive LoggingReceive case x do something Scala API 有Lo
  • Oracle SQL PLS-00049:错误的绑定变量

    我收到此错误 这似乎是列拼写问题 然而 我 99 确信我拼写的所有内容都是正确的 但我看不出有任何理由会出现我所犯的错误 这是来源 CREATE OR REPLACE TRIGGER update qoh trigger AFTER INS
  • CONTAINS 不适用于 Oracle Text

    我在执行此查询时遇到问题 SELECT FROM gob attachment WHERE CONTAINS gob a document java gt 0 它给了我 ORA 29902 error in executing ODCIIn

随机推荐

  • iOS 6 - UIWebView loadHTMLString 无法正常工作

    如果有人遇到以下问题 请告诉我您是否能够找到解决方案 我花了几天时间试图找到解决方案 但到目前为止还没有成功 我正在使用 XCode 4 5 和 iOS 6 SDK Golden Master 基本上 我的应用程序读取 HTML 文件并将其
  • 如何在 Angular2 中使禁用的反应表单可编辑

    我使用下面的代码创建一个表单并使其只读 我是角度新手 createForm this comapnyIdentificationForm this fb group businessName Validators required adre
  • 如何在 SVG 中获取多个内容的 ScrollBars

    我想要一个包含四个 SVG 内容的容器 SVG 现在 这四个 SVG 内容的内容超出了容器 SVG 中分配给它们的区域的内容 因此我要求滚动条自动出现 以便用户可以通过滚动看到完整的 svg 内容 我尝试通过添加属性宽度和高度来建立新视口
  • 从 vc++ 调用存储在堆中的代码

    想象一下我正在做这样的事情 void p malloc 1000 char p some opcode char p 1 another opcode for the sake of the example the opcodes are
  • 在 SWT-Widgets 上自动生成 ID

    有没有办法在 SWT Widgets 上自动生成 ID 以便 UI Tests 可以引用它们 我知道我可以使用 seData 手动设置 id 但我想以某种通用的方式为现有应用程序实现此功能 您可以使用以下命令为应用程序中的所有 shell
  • python 客户端服务器编程?

    这是 python 中的多线程服务器和客户端的源代码 在代码中 客户端和服务器在作业完成后关闭连接 我想保持连接处于活动状态并通过相同的连接发送更多数据避免每次关闭和打开套接字的开销 以下代码来自 http www devshed com
  • 为什么我的解决方案如此慢以及如何提高查询性能?

    目前我已经能够优化很多性能 但仍然有点慢 最新编辑 我当前的解决方案 最快的自动取款机 但仍然很慢 并保持秩序 server router post images function req res next var image bucket
  • 数组名是指针吗?

    C 中数组的名称是指针吗 如果不是 数组名称和指针变量有什么区别 数组是数组 指针是指针 但大多数情况下数组名称是转换的到指针 经常使用的一个术语是它们decay到指针 这是一个数组 int a 7 a包含七个整数的空间 您可以通过赋值将值
  • Pyspark 列转换:计算列中每个组的百分比变化

    我在本地计算机上使用 Pyspark 我有一个包含 450 万行和大约 30 000 种不同股票的 Spark 数据框 我需要计算每只股票随时间变化的百分比 我已经运行了 orderBy 以便将所有股票分组在一起 如下例所示 下面是一个简化
  • 在curl 7.33.0中使用--http2.0选项给出了不受支持的协议

    我使用的是centos 6 2 我需要在其中一个服务器请求中使用curl http2 0 但在查看之后我使用的是7 19 6http curl haxx se docs manpage html给我 http2 0 选项仅支持curl 7
  • Python:使用自动 Y 缩放绘制烛台

    我正在寻找一个Python绘图库 它允许我通过鼠标滚轮滚动 或类似 进行X缩放并在缩放时自动缩放Y轴来绘制烛台 最好是OHLC柱变体 作为我正在寻找的一个例子 tradingview com 完美地做到了这一点 看https uk trad
  • Spring Cloud:Feign 和 Http 连接池

    谁能告诉我 Spring Cloud Feign 客户端是否提供或支持 Http 连接池 如果是 如何配置池大小等设置 我在官方文档中似乎找不到这个 谢谢 通过调查 我将尝试回答我自己的问题 Spring Cloud Feign 使用 Ne
  • 为什么将闭包传递给接受函数指针的函数不起作用?

    In the 第二版Rust 编程语言 强调我的 函数指针实现了所有三个闭包特征 Fn FnMut and FnOnce 因此您始终可以将函数指针作为参数传递给需要闭包的函数 最好使用泛型类型和闭包特征之一来编写函数 以便您的函数可以接受函
  • 如何创建和使用ASP.NET vNext类库NuGet包?

    我想创建 ASP NET vNext 类库的 NuGet 包 我该怎么做 一步一步 我明白有kpm build 但我找不到关于在哪里下载 kpm 等的指南 另外 在获得它的 NuGet 包 或 DLL 后 如何将其从本地计算机添加到我的 v
  • 如何快速更新Google云存储上的静态站点?

    我有一个托管在谷歌云存储上的静态网站 我按照此处描述的相同方法进行设置 https cloud google com storage docs hosting static website 我已经购买了一个域名 目前网站运行顺利 我仍在更改
  • Asp.Net (MVC):哪个会话超时是什么?

    我制作了一个 Asp net MVC 网站 我对不同的超时设置感到非常困惑 有什么区别 web config 中的 SessionState 超时 应用程序池超时 Asp Net 会话超时属性 如果我想要 例如 6 小时的超时 我应该设置哪
  • PyQt4 - 从 QListWidget 中删除项目小部件

    我有一个 QListWidget 我需要删除一些项目 根据我的研究 这通常是一件令人不愉快的事情 我已经阅读了大量的解决方案 但没有一个适用于我的特定场景 目前 我只有实际的 Item Widgets 需要处理 不是它们的值或索引 这是因为
  • Visual Studio 忽略 #if DEBUG / RELEASE 范围内的代码,并且不检查错误或自动完成

    我一直在写一个 if DEBUG else endif代码片段 我注意到 Visual Studio 不允许我使用自动完成来完成部分键入的成员名称 并且它不会检查灰显的非活动代码是否有错误 我发现让它再次受到关注的唯一方法是将构建模式从 调
  • 在 LESS 中引用具有多层嵌套的父级

    我有以下较少 container column columns one width 40px 当我编译时 我的 CSS 得到以下内容 one container column one container columns width 40px
  • 在 Apache Spark Join 中包含空值

    我想在 Apache Spark 连接中包含空值 默认情况下 Spark 不包含带有 null 的行 这是默认的 Spark 行为 val numbersDf Seq 123 456 null toDF numbers val letter