大数据处理框架-Spark DataFrame构造、join和null空值填充

chatgpt/2023/9/27 16:14:18

1、Spark DataFrame介绍

在这里插入图片描述

DataFrame是Spark SQL中的一个概念,它是一个分布式的数据集合,可以看作是一张表。DataFrame与RDD的主要区别在于,前者带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。

2、构造DataFrame

import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.functions._
import org.apache.spark.sql.{SparkSession}object AppendColDFTest {Logger.getLogger("org").setLevel(Level.ERROR)Logger.getRootLogger().setLevel(Level.ERROR) // 设置日志级别def main(args: Array[String]): Unit = {val spark = SparkSession.builder().appName("InDFTest").master("local[*]").getOrCreate()// 创建aDF和bDFval aData = Seq((1, 1, 10, 20, 30),(1, 2, 10, 20, 30),(2, 1, 10, 20, 20),(2, 2, 10, 20, 50),(3, 4, 10, 20, 40),(3, 5, 10, 20, 30),(3, 6, 10, 20, 30),(4, 1, 10, 20, 20),(4, 2, 10, 20, 50))val aDF = spark.createDataFrame(aData).toDF("x", "y", "z", "p", "q")val bData = Seq((1, 1, 5, 15, 25),(2, 1, 25, 55, 105),(3, 4, 75, 85, 95))val bDF = spark.createDataFrame(bData).toDF("x", "y", "m", "n", "l")}
}

3、两个DataFrame join

// 使用left join关联aDF和bDF
val joinedDF = aDF.join(bDF, Seq("x", "y"), "left")
joinedDF.show()
+---+---+---+---+---+----+----+----+
|  x|  y|  z|  p|  q|   m|   n|   l|
+---+---+---+---+---+----+----+----+
|  1|  1| 10| 20| 30|   5|  15|  25|
|  1|  2| 10| 20| 30|null|null|null|
|  2|  1| 10| 20| 20|  25|  55| 105|
|  2|  2| 10| 20| 50|null|null|null|
|  3|  4| 10| 20| 40|  75|  85|  95|
|  3|  5| 10| 20| 30|null|null|null|
|  3|  6| 10| 20| 30|null|null|null|
|  4|  1| 10| 20| 20|null|null|null|
|  4|  2| 10| 20| 50|null|null|null|
+---+---+---+---+---+----+----+----+

4、null空值填充

// 添加新的列,并填充空缺的值
val resultDF = joinedDF.withColumn("m", when(col("m").isNull, lit(0)).otherwise(col("m"))).withColumn("n", when(col("n").isNull, lit(0)).otherwise(col("n"))).withColumn("l", when(col("l").isNull, lit(0)).otherwise(col("l"))).select("x", "y", "m", "n", "l").orderBy("x", "y")// 显示最终结果
resultDF.show()
+---+---+---+---+---+
|  x|  y|  m|  n|  l|
+---+---+---+---+---+
|  1|  1|  5| 15| 25|
|  1|  2|  0|  0|  0|
|  2|  1| 25| 55|105|
|  2|  2|  0|  0|  0|
|  3|  4| 75| 85| 95|
|  3|  5|  0|  0|  0|
|  3|  6|  0|  0|  0|
|  4|  1|  0|  0|  0|
|  4|  2|  0|  0|  0|
+---+---+---+---+---+

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-5312948.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

文件上传、下载的总结

最近做了一个后台系统,里面有好多复杂的功能。其中就有上传的功能点,上传的时候,我们要校验上传的文件格式,限制上传的数量,自定义上传接口,可以拖拽上传,可以进行删除、预览,删除之…

iOS开发-Reachability网络状态

iOS开发-Reachability网络状态 Reachablity 是一个iOS下检测,iOS设备网络环境用的库。 监视目标网络是否可用监视当前网络的连接方式监测连接方式的变更情况 一、Reachability 在Podfile中引入 pod Reachability二、监听网络状态 先看下Reachability&#xff…

bash sh 和 ./ 的区别

bash: 这是Bash shell的解释器。当你使用bash script.sh运行脚本时,你是在告诉系统使用Bash解释器来执行脚本。这意味着脚本中的所有Bash特性都可以使用。 sh: 这是Bourne shell的解释器。当你使用sh script.sh运行脚本时,你是在告…

螺旋矩阵 II——力扣59

文章目录 题目描述法一 模拟 题目描述 法一 模拟 初始化一个二维向量&#xff0c;名为matrix&#xff0c;它有n行和n列。向量的每个元素都是一个整数&#xff0c;初始化为0。初始化二维向量的语法如下&#xff1a;vector<vector<int>> matrix(n, vector<int>…

Deformable-detr在运行make.sh文件时,报NotImplementedError: Cuda is not availabel

NotImplementedError: Cuda is not availabel 当你运行下面命令报错NotImplementedError: Cuda is not availabel&#xff0c; sh make.sh根据我的经验&#xff0c;列出几条可以排查的思路。 使用nvcc -V查看一下在当前虚拟环境中使用的cuda版本。这个版本是cuda的编译版本&a…

C++ 结构体和联合体

1.结构体 结构体是一种特殊形态的类&#xff0c;它和类一样&#xff0c;可以有自己的数据成员和函数成员&#xff0c;可以有自己的构造函数和析构函数&#xff0c;可以控制访问权限&#xff0c;可以继承&#xff0c;支持包含多态&#xff0c;结构体定义的语法和类的定义语法几…

excel英语翻译让你的数据更容易被理解

从前有一个名叫小明的办公室职员&#xff0c;他每天都要处理大量的数据和报表。然而&#xff0c;由于工作需要&#xff0c;他经常收到来自不同国家的Excel表格&#xff0c;这些表格上的内容都是用各种各样的语言编写的&#xff0c;让他很难理解其中的意思。这时&#xff0c;小明…

Redis主从复制、哨兵、cluster集群原理+实验

目录 一、Redis 主从复制 1、主从复制的作用 2、主从复制流程 3、搭建Redis 主从复制 安装Redis&#xff08;所有主机) 修改Master节点Redis配置文件 修改Slave节点Redis配置文件 验证主从效果 一、Redis 主从复制 主从复制&#xff0c;是指将一台Redis服务器的数据&am…
推荐文章