Spark 中有哪些不同的联接类型?

2023-11-23

我查看了文档,它说支持以下连接类型:

要执行的连接类型。默认内。必须是以下之一:内部、交叉、 外部、完整、full_outer、左、left_outer、右、right_outer、 左半,左反。

我看了看堆栈溢出答案关于 SQL 连接和最上面的几个答案没有提到上面的一些连接,例如left_semi and left_anti。它们在 Spark 中意味着什么?


这是一个简单的说明性实验:

import org.apache.spark.sql._

object SparkSandbox extends App {
  implicit val spark = SparkSession.builder().master("local[*]").getOrCreate()
  import spark.implicits._
  spark.sparkContext.setLogLevel("ERROR")

  val left = Seq((1, "A1"), (2, "A2"), (3, "A3"), (4, "A4")).toDF("id", "value")
  val right = Seq((3, "A3"), (4, "A4"), (4, "A4_1"), (5, "A5"), (6, "A6")).toDF("id", "value")

  println("LEFT")
  left.orderBy("id").show()

  println("RIGHT")
  right.orderBy("id").show()

  val joinTypes = Seq("inner", "outer", "full", "full_outer", "left", "left_outer", "right", "right_outer", "left_semi", "left_anti")

  joinTypes foreach { joinType =>
    println(s"${joinType.toUpperCase()} JOIN")
    left.join(right = right, usingColumns = Seq("id"), joinType = joinType).orderBy("id").show()
  }
}

Output

LEFT
+---+-----+
| id|value|
+---+-----+
|  1|   A1|
|  2|   A2|
|  3|   A3|
|  4|   A4|
+---+-----+

RIGHT
+---+-----+
| id|value|
+---+-----+
|  3|   A3|
|  4|   A4|
|  4| A4_1|
|  5|   A5|
|  6|   A6|
+---+-----+

INNER JOIN
+---+-----+-----+
| id|value|value|
+---+-----+-----+
|  3|   A3|   A3|
|  4|   A4| A4_1|
|  4|   A4|   A4|
+---+-----+-----+

OUTER JOIN
+---+-----+-----+
| id|value|value|
+---+-----+-----+
|  1|   A1| null|
|  2|   A2| null|
|  3|   A3|   A3|
|  4|   A4|   A4|
|  4|   A4| A4_1|
|  5| null|   A5|
|  6| null|   A6|
+---+-----+-----+

FULL JOIN
+---+-----+-----+
| id|value|value|
+---+-----+-----+
|  1|   A1| null|
|  2|   A2| null|
|  3|   A3|   A3|
|  4|   A4|   A4|
|  4|   A4| A4_1|
|  5| null|   A5|
|  6| null|   A6|
+---+-----+-----+

FULL_OUTER JOIN
+---+-----+-----+
| id|value|value|
+---+-----+-----+
|  1|   A1| null|
|  2|   A2| null|
|  3|   A3|   A3|
|  4|   A4|   A4|
|  4|   A4| A4_1|
|  5| null|   A5|
|  6| null|   A6|
+---+-----+-----+

LEFT JOIN
+---+-----+-----+
| id|value|value|
+---+-----+-----+
|  1|   A1| null|
|  2|   A2| null|
|  3|   A3|   A3|
|  4|   A4| A4_1|
|  4|   A4|   A4|
+---+-----+-----+

LEFT_OUTER JOIN
+---+-----+-----+
| id|value|value|
+---+-----+-----+
|  1|   A1| null|
|  2|   A2| null|
|  3|   A3|   A3|
|  4|   A4| A4_1|
|  4|   A4|   A4|
+---+-----+-----+

RIGHT JOIN
+---+-----+-----+
| id|value|value|
+---+-----+-----+
|  3|   A3|   A3|
|  4|   A4| A4_1|
|  4|   A4|   A4|
|  5| null|   A5|
|  6| null|   A6|
+---+-----+-----+

RIGHT_OUTER JOIN
+---+-----+-----+
| id|value|value|
+---+-----+-----+
|  3|   A3|   A3|
|  4|   A4|   A4|
|  4|   A4| A4_1|
|  5| null|   A5|
|  6| null|   A6|
+---+-----+-----+

LEFT_SEMI JOIN
+---+-----+
| id|value|
+---+-----+
|  3|   A3|
|  4|   A4|
+---+-----+

LEFT_ANTI JOIN
+---+-----+
| id|value|
+---+-----+
|  1|   A1|
|  2|   A2|
+---+-----+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 中有哪些不同的联接类型? 的相关文章

  • scala 中的抽象类型

    我正在经历抽象类型Scala我收到一个错误 我正在尝试的例子 scala gt class Food abstract class Animal type SuitableFood lt Food def eat food Suitable
  • 将 Apache Flink 与 Lagom 结合使用时出现 java.io.NotSerializedException

    我正在 Lagom 的微服务实现中编写 Flink CEP 程序 我的 FLINK CEP 程序在简单的 scala 应用程序中运行得非常好 但是当我在 Lagom 服务实现中使用此代码时 我收到以下异常 拉戈姆服务实施 override
  • Scala Continuations - 为什么我的转移调用不能位于 try-catch 块内?

    我对 Scala 延续很陌生 而且对一般的 scala 语言也比较陌生 我尝试使用 Scala 延续并编写了以下代码 case class MyException msg String extends Exception def go In
  • 为什么类型级计算需要 Aux 技术?

    我很确定我在这里遗漏了一些东西 因为我对 Shapeless 还很陌生并且我正在学习 但是 Aux 技术实际上是什么时候required 我看到它是用来暴露type通过将其提升为另一个 同伴 的签名来声明type定义 trait F A t
  • 我如何判断我的 Spark 工作是否有进展?

    我有一个正在运行的 Spark 作业YARN它似乎只是挂起并且没有进行任何计算 这是当我这样做时纱线所说的yarn application status
  • Scala 泛型函数值(匿名函数)- 缺少参数类型(错误)

    我是 Scala 新手 Scala 代码运行器版本 2 7 7 final 我真的不明白为什么当我们使用高阶函数时它要求调用者提供参数类型 在下面的示例中 我有一个独立的对象 Util 具有一个功能 但在Main块中 调用者必须将参数类型传
  • 将 Scala 文件转换为 Dll

    我有一些使用 IntelliJ 和 SBT Plugin 编写的 scala 代码 并希望将代码作为 C 的 DLL 提供给我 我已经尝试使用 ikvmc 我通过 package 将所有类打包在一个罐子中 之后 我手动设置一个 jar 其中
  • 如何从 Spark MLLib 中的 TF Vector RDD 获取单词详细信息?

    我使用创建了术语频率HashingTF在斯帕克 我已经使用术语频率tf transform对于每个单词 但结果是以这种格式显示的
  • 在 Apache Spark 上下文中,内存数据存储意味着什么?

    我读到 Apache Spark 将数据存储在内存中 然而 Apache Spark 旨在分析大量数据 又称大数据分析 在这种情况下 内存数据存储的真正含义是什么 它可以存储的数据是否受到可用 RAM 的限制 它的数据存储与使用HDFS的A
  • Scala 重载构造函数和 super

    我无法理解如何在 Java 上开发类似于以下的 Scala 代码 public abstract class A protected A protected A int a public abstract class B protected
  • 简单的 Scala actor 问题

    我确信这是一个非常简单的问题 但很不好意思地说我无法理解它 我有一个 Scala 值列表 我想使用演员来并行地对每个值进行一些 外部 调用 我想等到所有值都已处理完毕 然后继续 没有共享值被修改 有人可以建议吗 Thanks Scala 中
  • 为 Spark Thrift 服务器提供仓库目录的路径

    我已经设置了 Spark 集群 并且成功通过 Spark SQL 连接器连接 Tableau 我从 Spark shell 创建了表 并使用 saveAsTable 如何访问从 Tableau 保存的表 启动spark thrift服务器时
  • 将列表拆分为多个具有固定元素数量的列表

    如何将元素列表拆分为最多包含 N 个项目的列表 例如 给定一个包含 7 个元素的列表 创建 4 个组 最后一组可能包含较少的元素 split List 1 2 3 4 5 6 seven 4 gt List List 1 2 3 4 Lis
  • 将 Scala Dataframe 写入 CSV 文件时应用 UTF8 编码

    在 Spark2 Scala 中将数据帧写入 CSV 文件时如何正确应用 UTF8 编码 我正在使用这个 df repartition 1 write mode SaveMode Overwrite format csv option he
  • 使用 Spark pandas_udf 创建列,具有动态数量的输入列

    我有这个 df df spark createDataFrame row a 5 0 0 0 11 0 row b 3394 0 0 0 4543 0 row c 136111 0 0 0 219255 0 row d 0 0 0 0 0
  • Scala 组合器解析器 - 区分数字字符串和变量字符串

    我正在做 Cay Horstmann 的组合器解析器练习 我想知道区分代表数字的字符串和代表匹配语句中变量的字符串的最佳方法 def factor Parser ExprTree wholeNumber expr ident case a
  • Scala:在运行时获取 mixin 接口

    我需要在运行时从给定的类获取所有接口 全部加载在类加载器中 例如 如果一个类是这样声明的 trait B trait C trait D class A extends B with C with D 我想在运行时获取这些信息 A 取决于
  • Scala 性能问题

    In the 丹尼尔 科泽夸 Daniel Korzekwa 撰写的文章 http blog danmachine com 2011 01 moving from java to scala one year html 他说以下代码的性能
  • Spark-获取RDD中的文件名

    我正在尝试处理每天都在增长的 4 个文本文件目录 我需要做的是 如果有人试图搜索发票号码 我应该给他们包含该发票号码的文件列表 我能够通过将文本文件加载为 RDD 来映射和减少文本文件中的值 但是如何获取文件名和其他文件属性呢 从 Spar
  • 自定义 NIO 文件系统无法通过 SBT 的测试任务加载

    为了进行测试 我使用内存中的 NIOFileSystem执行 memoryfs https github com openCage memoryfs 我以前已经利用过它 并且它似乎运行良好 例如梅文 然而 现在 在SBT项目中 不可能初始化

随机推荐

  • 在运行时检索 Log4J Appender 列表

    是否可以在运行时检索 log4j 中配置的所有附加程序的列表 我将进一步充实这个场景 给定以下配置 我将如何检索所有附加程序 stdout 和 altstdout log4j rootLogger error stdout log4j ap
  • 在 CMake 中使用别名目标

    定义 CMake 目标时 可以创建别名目标 以便别名可用于在后续命令中引用定义的目标 例如 add library foo lib foo cpp bar cpp bat cpp add library foo lib ALIAS foo
  • 在 Javascript 对象中使用 $.getJSON() 和回调

    我正在尝试设置一个对象 以便它具有封装的 getJSON 方法 这是我的设置 function Property price deposit this price price this deposit deposit this getMor
  • 引起原因:java.lang.IllegalStateException:没有为此提供程序指定值

    我试图从 github 导入一个项目 但它显示了此配置问题 有人可以建议我该怎么办吗 2019 09 06 19 23 53 953 thread 10 INFO e project sync GradleSyncState Gradle
  • 假设我有一组链接 我可以使用吗 div 代替 div
  • 通用 CRUD 控制器和视图

    我刚刚浏览了 ASP NET 的一些入门教程 并且对如何实现简单的 CRUD 管理应用程序有了一个不错的了解 是否有任何常用的模式来实现通用列表 创建 更新 删除操作 必须为每个模型构建脚手架 然后维护所有添加 编辑和列表视图和控制器 这似
  • Jspx 文件和条件注释

    我想使用 Spring 和 jspx 网页创建一个 Web 应用程序 我的问题是如何在 jspx 中添加 IE 的条件注释 他们似乎没有被解释 另外我希望我的网页是 HTML5 投诉 我尝试了一些方法 但在 IE9 中遇到不兼容问题 似乎无
  • cURL 错误 35 - 连接到 api.rkd.reuters.com 时出现未知 SSL 协议错误:443

    在开发机器 mac 上 通过 PHP 中的 cURL 连接到此没有问题 但在 Ubuntu 中 我收到此错误 我已经在本地计算机和 Amazon AWS 实例上尝试过 我用谷歌搜索了又搜索 但一直遇到砖墙 没有防火墙限制 这完全是个谜 ph
  • 如何使用 NumPy 数组的矢量化来使用 Geopy 库计算大型数据集的测地距离?

    我正在尝试从数据帧计算测地距离 该数据帧由四列纬度和经度数据组成 大约有 300 万行 我使用 apply lambda 方法来完成此任务 但花了 18 分钟才能完成任务 有没有办法将矢量化与 NumPy 数组结合使用来加速计算 谢谢您的回
  • AngularJS - html5Mode - 无法获取/登录

    Hi 使用 yeoman grunt 和 Bower 创建了一个 angularJS 应用程序 我已经为应用程序启用了 html5Mode 它的工作原理 但是 当我刷新页面 localhost 9000 登录 时 它说 Cannot GET
  • 将字符串写成螺旋状

    我最近参加了一家公司赞助的编程比赛 有一个问题我不明白 它问的是什么 这是问题 字符串 paypal 是更快 更安全的汇款方式 写在 从左上角开始 在正方形内顺时针旋转的螺旋图案 您可能希望以固定字体显示此图案以获得更好的易读性 P A Y
  • 在 Swift 中旋转数组

    在探索 Swift 中的算法时 无法在不使用 funcs 的情况下找到 Swift 中数组旋转的算法shiftLeft shiftRight C 有一个优雅的算法 时间复杂度为 O N Function to left rotate arr
  • 如何获取Android设备屏幕尺寸?

    我有两个分辨率相同的 Android 设备 Device1 gt 分辨率 480x800 对角线屏幕尺寸 gt 4 7 英寸 Device2 gt 分辨率 480x800 对角线屏幕尺寸 gt 4 0 英寸 如何找到设备对角线屏幕尺寸 以编
  • 如何在 Javascript 中比较字符串数组?

    我想看看两个字符串数组是否相等 Eg compare abc def def abc 应该返回true同样 compare abc def def ghi 应该返回false 做这个的最好方式是什么 JavaScript 没有 Set 或
  • 在tensorflow-gpu 中“未找到‘CXXABI_1.3.8’” - 从源安装

    我已经重新安装了Anaconda2 当 python c 导入张量流 时出现以下错误 ImportError home jj anaconda2 bin lib libstdc so 6 找不到版本 CXXABI 1 3 8 home jj
  • 使用子类参数重写子类方法?

    当子类重写时 如何强制基本方法采用相同的特定子类实例 i e abstract class Animal def mateWith that Animal class Cow extends Animal override def mate
  • 如何通过 Node.js 连接到 Postgres

    我发现自己试图创建一个 postgres 数据库 所以我安装了 postgres 并启动了一个服务器initdb usr local pgsql data 然后我开始了这个实例postgres D usr local pgsql data现
  • ASP.NET MVC2 中具有 SelectList 绑定的 ViewModel

    我正在尝试为名为 Product 的 Linq2SQL 实体实现一个编辑 ViewModel 它有一个链接到品牌列表的外键 目前我正在通过 ViewData 并使用 DropDownListFor 填充品牌列表 因此 div class e
  • M1 Mac 上的 Scrapy:MemoryError:无法为 ffi.callback() 分配写入+执行内存

    我是 scrapy 新手 最近开始在 M1 MacBook Air 上使用它 我遇到了一个问题 例如 当我尝试做这样的事情时 scrapy shell bbc com 它会返回我 MemoryError 无法为 ffi callback 分
  • Spark 中有哪些不同的联接类型?

    我查看了文档 它说支持以下连接类型 要执行的连接类型 默认内 必须是以下之一 内部 交叉 外部 完整 full outer 左 left outer 右 right outer 左半 左反 我看了看堆栈溢出答案关于 SQL 连接和最上面的几