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代码) 的相关文章

  • e:B, f:(B,A)=>B) : B 是什么意思

    我对这意味着什么感到困惑 我理解柯里化 但我似乎无法完全阅读代码 def foldLeft A B xs List A e B f B A gt B B 只是几个建议 顺便说一句 里面没有柯里化 def foldLeft A B xs Li
  • 通过 Gradle 进行测试时记录日志

    在测试时 Gradle 似乎将 stdout stderr 重定向到project dir build reports tests index html 有没有办法避免这种重定向 并将内容打印到控制台 附加信息 这是一个 Scala 2 9
  • scala sbt 在多项目上测试运行设置和清理命令一次

    我知道我可以通过修改 testOptions 在 sbt 中添加设置和清理代码以用于测试阶段 例如 val embedMongoTestSettings Seq Setting Seq testOptions in Test Tests S
  • Scalaz 7 Iteratee 处理大型 zip 文件(OutOfMemoryError)

    我正在尝试使用 scalaz iteratee 包在恒定空间中处理大型 zip 文件 我需要对 zip 文件中的每个文件执行一个长时间运行的进程 这些进程可以 并且应该 并行运行 我创建了一个EnumeratorT使每个膨胀ZipEntry
  • 《使用 Apache Flink 进行流处理》如何从 IntelliJ 运行书籍代码?

    如中所述这个帖子 https stackoverflow com questions 61043860 how to run first example of apache flink我无法成功运行 使用 Apache Flink 进行流处
  • 将列表拆分为多个具有固定元素数量的列表

    如何将元素列表拆分为最多包含 N 个项目的列表 例如 给定一个包含 7 个元素的列表 创建 4 个组 最后一组可能包含较少的元素 split List 1 2 3 4 5 6 seven 4 gt List List 1 2 3 4 Lis
  • Spark:用列的平均值替换数据框中的空值

    如何创建 UDF 以编程方式将每列中 Spark 数据框中的空值替换为列平均值 例如 在示例中 数据 col1 空值的值为 2 4 6 8 5 5 5 示例数据 col1 col2 col3 2 null 3 4 3 3 6 5 null
  • IntelliJ IDEA Scala 插件问题

    我对新的 Intellij IDEA 10 和 Scala 插件有疑问 当我在 Scala 源文件中输入任何内容时 编辑器会永久冻结 在其他文件 java 和其他 编辑器中效果很好 结构视图 scala 检查和显示成员功能已关闭 堆大小增加
  • Scala 性能问题

    In the 丹尼尔 科泽夸 Daniel Korzekwa 撰写的文章 http blog danmachine com 2011 01 moving from java to scala one year html 他说以下代码的性能
  • 哪些 ORM 与 Scala 配合得很好? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Scala - 如何解决“值不是 Nothing 的成员”错误

    此示例代码基于 Atmosphere 类 但如果有人可以让我了解该错误的一般含义 我想我可以找出任何特定于 Atmosphere 的解决方案 val bc BroadcasterFactory getDefault lookup broad
  • 将 Scala 库转换为 DLL (.NET)

    我正在尝试从 scala 类创建一个 Dll 我将 IntelliJ 与 SBT 一起使用 我已经找到了一种使用 ikvm converter 将 jar 文件转换为 Dll 的方法 现在的问题是 当我在 SBT 下使用 package 从
  • 宏:knownDirectSubclasses 被嵌套类型破坏?

    我有一个宏 它枚举密封特征的直接子类型 import scala reflect macros Context import language experimental macros object Checker def apply A U
  • 如何抑制spark输出控制台中的“Stage 2===>”?

    我有数据帧并试图获取不同的计数并且能够成功获取不同的计数 但是每当 scala 程序执行时我都会收到此消息 Stage 2 gt 1 1 2 我如何在控制台中抑制特定的此消息 val countID dataDF select substr
  • 使用原始类型模拟案例类

    考虑以下类型结构 trait HasId T def id T case class Entity id Long extends HasId Long 比方说 我们想在一些测试中模拟实体类 val entityMock mock Enti
  • 使用 Spray-json 解析简单数组

    我正在尝试 但失败了 了解 Spray json 如何将 json feed 转换为对象 如果我有一个简单的 key gt value json feed 那么它似乎可以正常工作 但是我想要读取的数据出现在如下列表中 name John a
  • Scala:类似 Option (Some, None) 但具有三种状态:Some、None、Unknown

    我需要返回值 当有人询问值时 告诉他们以下三件事之一 这是值 没有价值 我们没有关于该值的信息 未知 情况 2 与情况 3 略有不同 示例 val radio car radioType 我们知道该值 返回无线电类型 例如 pioneer
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • 在 Scala 和 SBT 中调试较长的编译时间

    在我的 Scala SBT 项目中 我有一个文件需要 5 分钟才能编译 所有其他的都可以在几秒钟内编译 这使得开发非常痛苦 我确信我滥用了一些 Scala 构造 但我不知道如何调试它 如何在 Scala 中调试较长的编译时间 我正在使用 S
  • 为什么《Scala 中的函数式编程》一书的“无异常处理错误”一章中没有提到“scala.util.Try”?

    在 Scala 中的函数式编程 一书中的 无异常处理错误 一章中 作者给出 从函数体抛出异常的问题 Use Option如果我们不关心实际的异常 Use Either如果我们关心实际的异常 But scala util Try没有提到 从我

随机推荐

  • 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