Spark DataFrame的Join操作和withColumn、withColumnRenamed方法实践案例(Scala Demo代码)

2023-11-16

import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._

object DFTest {
  Logger.getLogger("org").setLevel(Level.ERROR)
  Logger.getRootLogger().setLevel(Level.ERROR) // 设置日志级别
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName("DFTest")
      .master("local[*]")
      .getOrCreate()

    import spark.implicits._
    println("classDF")
    // 创建classDF和studentDF
    val classDF = Seq(
      (1, 1, "Alice", 90),
      (1, 2, "Bob", 80),
      (2, 1, "Charlie", 85),
      (2, 2, "David", 95)
    ).toDF("class", "no", "name", "score")

    classDF.show()
  }
}
classDF
+-----+---+-------+-----+
|class| no|   name|score|
+-----+---+-------+-----+
|    1|  1|  Alice|   90|
|    1|  2|    Bob|   80|
|    2|  1|Charlie|   85|
|    2|  2|  David|   95|
+-----+---+-------+-----+
println("studentDF")
val studentDF = Seq(
  (1, 1),
  (2, 1)
).toDF("class", "no")
studentDF.show()
studentDF
+-----+---+
|class| no|
+-----+---+
|    1|  1|
|    2|  1|
+-----+---+
println("joinedDF")
// 使用left_outer join将classDF和studentDF连接在一起
val joinedDF = classDF.join(studentDF.withColumnRenamed("class", "s_class").withColumnRenamed("no", "s_no"), $"class" === $"s_class" && $"no" === $"s_no", "left_outer")
joinedDF.show()
joinedDF
+-----+---+-------+-----+-------+----+
|class| no|   name|score|s_class|s_no|
+-----+---+-------+-----+-------+----+
|    1|  1|  Alice|   90|      1|   1|
|    1|  2|    Bob|   80|   null|null|
|    2|  1|Charlie|   85|      2|   1|
|    2|  2|  David|   95|   null|null|
+-----+---+-------+-----+-------+----+
// 添加新列flag,如果s_class和s_no在studentDF中出现,则值为1,否则为0
val resultDF = joinedDF.withColumn("flag", when(col("s_class").isNotNull && col("s_no").isNotNull, 1).otherwise(0)).drop("s_class", "s_no")
println("resultDF")
// 显示结果
resultDF.show()
resultDF
+-----+---+-------+-----+----+
|class| no|   name|score|flag|
+-----+---+-------+-----+----+
|    1|  1|  Alice|   90|   1|
|    1|  2|    Bob|   80|   0|
|    2|  1|Charlie|   85|   1|
|    2|  2|  David|   95|   0|
+-----+---+-------+-----+----+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark DataFrame的Join操作和withColumn、withColumnRenamed方法实践案例(Scala Demo代码) 的相关文章

  • Scala 中的 Apply 和 lambda

    我有下面的代码 scala gt val builder new StringBuilder foo bar baz builder StringBuilder foo bar baz scala gt 0 until 5 foreach
  • Spark Streaming 中是否需要检查点

    我注意到 Spark 流示例也有检查点代码 我的问题是检查点有多重要 如果是为了容错 那么在此类流应用程序中发生故障的频率是多少 这一切都取决于您的用例 假设您正在运行一个流作业 它仅从 Kafka 读取数据并计算记录数 如果您的应用程序在
  • 在 Spark 中将多行汇总为单行和单列

    我有一个如下的火花 DF 我需要汇总具有与单行相同 ID 的多行 但值应该不同 id values 1 hello 1 hello Sam 1 hello Tom 2 hello 2 hello Tom 预期输出 id values 1 h
  • 如何在Scala中表达这个类型?存在类型类(即隐式)限制吗?

    我正在使用 Play 框架的 JSON 库 它使用类型类来实现Json toJson功能 http www playframework org documentation api 2 0 4 scala index html play ap
  • 如何初始化子类型中特征的值?

    如果我写 trait T val t 3 val u 1 t Nil class U extends T override val t 2 new U u 它表明了这一点 List 1 0 我应该如何更改上面的代码以使其显示以下内容 Lis
  • 创建自定义 scala 集合,其中映射默认返回自定义集合?

    特质TraversableLike A Repr 允许人们在其中进行收藏some函数将返回一个Repr 而其他人则继续返回类型参数That在功能上 有没有办法定义一个CustomCollection A 其中函数如map 其他的默认That
  • 按元素聚合数组

    Spark scala 相当新 我想知道是否有一种简单的方法以按列方式聚合 Array Double 这是一个例子 c1 c2 c3 1 1 1 0 1 0 3 4 1 2 1 0 0 0 4 3 2 1 0 0 0 0 0 0 2 3 1
  • WSClient - 打开的文件太多

    我正在 CentOS 6 上使用 Play Framework 2 4 我的应用程序抛出此异常 java net SocketException Too many open files 我在 Stack Overflow 上搜索了很多主题并
  • xsbt 插件 1.0.0-M7 和 scalatra

    我尝试在我的 scalatra 项目中将 xsbt 插件升级到 1 0 0 M7 但 scalatra 似乎与此版本不兼容 当我尝试重新加载项目时 出现以下错误 我尝试过 scalatra 2 3 0 版本 问候 德斯 java lang
  • 读取不同文件夹深度的多个 csv 文件

    我想递归地将给定文件夹中的所有 csv 文件读入 Spark SQLDataFrame如果可能的话 使用单一路径 我的文件夹结构如下所示 我想包含具有一个路径的所有文件 resources first csv resources subfo
  • 承诺的反面是什么?

    承诺代表将来可能可用 或无法实现 的值 我正在寻找的是一种数据类型 它表示将来可能变得不可用的可用值 可能是由于错误 Promise a b TransitionFromTo
  • 比较 javascript 元素和 scala 变量的 Play 框架 Twirl 模板

    如下面的代码示例所示 我想比较 scala 辅助元素内的 javascript 元素 然而 即使存在元素 abcde 它也始终返回 false 除了使用标签之外 如何获取 scala 辅助元素内的 javascript 值 appSeq S
  • 使用 org.apache.hadoop/* 依赖项离线编译 sbt 时遇到的问题

    使用依赖于 org apache hadoop 包的 sbt 进行离线编译时遇到很多麻烦 一个简单的build sbt name Test version 1 0 scalaVersion 2 10 4 libraryDependencie
  • Map 和 Set 的实际类(不是抽象类,也不是特征类)是什么?

    在 Scala 中 映射和集合文字可以通过以下方式创建 val m Map 1 gt a 以及引用的类型m字面意思都是Map Int String 然而 scala文档表明Map实际上是一个特征 具有需要实现才能实例化的抽象成员 scala
  • 在 Scala 中创建任意类作为 monad 实例

    为了使任何东西都可以在 monad 上下文中操作 如果使用 Haskell 我只需在任何地方为给定类型添加类 Monad 的实现 所以我根本不接触数据类型定义的来源 像 人造的东西 data Z a MyZLeft a MyZRight a
  • 一般处理枚举的 Scala 类

    我想创建一个通用类来保存枚举的值 并且还允许访问枚举的可能值 以属性编辑器为例 您需要知道属性的当前值 并且还需要能够知道该属性的其他合法值 并且枚举的类型不应该提前知道 您应该能够使用任何类型的枚举 我的第一个想法是这样的 class E
  • 标识符中下划线的 Scala 风格指南

    我已经接受了许多其他语言的观点 即下划线在标识符中具有与字母表一样多的自由度 因此 v and v 另外 尾随下划线是受到推崇的避免与保留关键字产生歧义 class case val abc 0
  • 使一个 sbt 配置依赖于另一个配置

    sbt 文档显示了如何仅在项目之间声明依赖关系的示例 但我确信有方法可以声明一个配置依赖于另一个配置 就像测试配置使用编译配置中的类路径一样 如何声明我自己的配置 以便它依赖于编译配置生成的类路径 我更仔细地研究了建议的解决方案 然后又出现
  • 具有定期更新的静态数据集的结构化流

    将流媒体与静态数据集合并是结构化流媒体的一个重要功能 但在每个批次中 数据集都会从数据源刷新 由于这些源并不总是那么动态 因此在指定的时间段 或批次数 内缓存静态数据集会提高性能 在指定的时间段 批次数之后 将从源重新加载数据集 否则从缓存
  • Scala 中的模式匹配是如何在字节码级别实现的?

    Scala 中的模式匹配是如何在字节码级别实现的 是不是像一系列if x instanceof Foo 构造 还是其他什么 它对性能有何影响 例如 给出以下代码 来自Scala 示例 http www scala lang org docu

随机推荐

  • qqkey获取原理_qqkey获取器下载

    qqkey获取工具 QQkey控制接收生成器 是一款类似于灰鸽子的一款软件 不同的是不能不能盗号 在你的好友打开了你配置的文件后 你可以在工具中获取到好友的QQkey信息 可以把对方的QQ当做的自己的QQ一样 想干嘛就干嘛 赶紧来下载使用吧
  • 在 esmodule 环境下使用 jsts

    文章目录 1 说明 Geometry 类 2 安装 3 使用 以 buffer 为例 4 JTS 文档 1 说明 jsts 完全就是根据其老妈 jts 的 java 包结构移植的 除了部分分析功能需要额外注意外 基本上所有的子模块的根路径位
  • C++ 中隐藏DOS调用的命令行窗口

    转自 http hi baidu com jackyho2000 blog item b5c5fabdd3b4db0019d81fbb html 我演示了一下在MFC程序中怎么应用DOS的dir的命令 可是我们遇到了需要解决的问题 首先就是
  • 包含抽象方法的类是抽象类吗?

    如果这个问题的范围是围绕 类 那么 包含抽象方法的类一定是抽象类 因为抽象方法的特征是 必须定义在抽象类中 但是话由说回来了 因为在JAVA中还有一种允许使用抽象方法的结构 那就是接口 在接口中的方法只能是抽象方法 不允许出现具体实现的方法
  • Python,创建map

    import matplotlib pyplot as mpp import os random math matplotlib version 3 5 1 numpy version 1 21 5 创建画布及坐标轴 def set cav
  • C语言二级题库(刷题软件+60套真题+填空题+大题)2022年9月份新题第三套

    文章只能发选择题 刷大题去刷题软件效果会更好 刷题软件 gongzhonghao 露露IT 选择题 1 下面选项中不是关系数据库基本特征的是 A 不同的列应有不同的列名 B 不同的列应有不同的数据类型 C 与行的次序无关 D 与列的次序无关
  • 业内常用即时传输网盘

    工具名称 业内常用即时传输网盘 功能简介 无需登录 短时间内有效 多用于传输小型敏感文件 外部链接 请见文内 内部网盘链接 在线站点 无网盘链接 使用说明 许多安全行内人士在团队内互传敏感文件时 为实现上传和下载文件时提供较快的速度和数据隐
  • 为什么我不使用JetBrains的屌炸天编辑器

    首先解释一下 JetBrains并没有出过一款叫做 屌炸天 的编辑器 作为一个提到编辑器圣战内心就无比激动的码农 我使用过JetBrains的大部分产品 从开始的PhpStorm 到PyCharm Intellij IDEA CLION a
  • XAML基础控件

    常用布局控件
  • QT内存管理

    Qt内存管理机制 Qt 在内部能够维护对象的层次结构 对于可视元素 这种层次结构就是子组件与父组件的关系 对于非可视元素 则是一个对象与另一个对象的从属关系 在 Qt 中 在 Qt 中 删除父对象会将其子对象一起删除 C 中delete 和
  • mmap和常规文件操作的区别

    mmap和常规文件操作的区别 对linux文件系统不了解的朋友 请参阅我之前写的博文 从内核文件系统看文件读写过程 我们首先简单的回顾一下常规文件系统操作 调用read fread等类函数 中 函数的调用过程 1 进程发起读文件请求 2 内
  • C语言:初阶指针和结构体

    1 指针是什么 指针理解的两个要点 指针是内存中的一个最小单元的编号 也就是地址 平时口语说的指针 通常指的是指针变量 是用来存放内存地址的变量 为了管理计算机内存空间 会把内存分为一个一个一个小的内存单元 每个内存单元占一个字节的空间 那
  • [carla]carla-ros-bridge调整主监视器视角

    打开文件 carla ros bridge src carla ros bridge actor factory py 在class ActorFactory object 中添加函数 def set spectator self worl
  • 输入缓冲区

    输入缓冲区 一 什么是输入缓冲区 二 如何处理 一 什么是输入缓冲区 如上图所示 当我们输入密码的字符串按下回车后 我们发现还没来得及输入yes or no 就已经显示输入失败 这是怎么回事儿呢 这就要引出我们今天介绍的主角 输入缓冲区 输
  • osg学习(七十二)SPHERE_MAP REFLECTION_MAP NORMAL_MAP

    1 球面贴图 已知视点 物体顶点 物体法线 计算反射向量 在球面上根据反射向量和视向量计算法向量 也即球面点 根据球面点计算纹理坐标进行采样贴图 2 反射贴图 根据1计算反射向量 以反射向量计算纹理坐标进行采样贴图 3 法线贴图 直接根据法
  • vb 字符串截取 资料 搜集

    1 ASC X Chr X 转换字符字符码 格式 P Asc X 返回字符串X的第一个字符的字符码 P Chr X 返回字符码等于X的字符 2 Len X 计算字符串X的长度 格式 P Len X 说明 空字符串长度为0 空格符也算一个字符
  • yolov5网络结构学习

    注 原文链接是深入浅出Yolo系列之Yolov5核心基础知识完整讲解 我觉得这篇文章写的很好 所以自己手敲了一遍 并修改了很小一部分的细节 或者加了一些来自作者另一篇文章深入浅出Yolo系列之Yolov3 Yolov4 Yolov5核心基础
  • Go(十三)Error接口和错误处理

    Go 语言中的错误处理与其他语言不太一样 它把错误当成一种值来处理 更强调判断错误 处理错误 而不是一股脑的 catch 捕获异常 目录 Error 接口 Error 接口 创建错误 fmt Errorf 错误结构体类型 Error 接口
  • 图像处理+边缘检测算法

    一 边缘检测算子类别 常见边缘检测算子 Roberts Sobel Prewitt Laplacian Log Marr Canny Kirsch Nevitia 二 一阶微分算子 Roberts Sobel Prewitt Robert算
  • Spark DataFrame的Join操作和withColumn、withColumnRenamed方法实践案例(Scala Demo代码)

    import org apache log4j Level Logger import org apache spark sql SparkSession import org apache spark sql functions obje