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

1、Spark DataFrame介绍

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

2、构造DataFrame

scala 复制代码
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和bDF
    val 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

scala 复制代码
// 使用left join关联aDF和bDF
val joinedDF = aDF.join(bDF, Seq("x", "y"), "left")
joinedDF.show()
bash 复制代码
+---+---+---+---+---+----+----+----+
|  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空值填充

scala 复制代码
// 添加新的列,并填充空缺的值
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()
bash 复制代码
+---+---+---+---+---+
|  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|
+---+---+---+---+---+
相关推荐
梦里不知身是客118 小时前
sparkSQL连接报错的一个解决方法
spark
源码之家8 小时前
基于Python房价预测系统 数据分析 Flask框架 爬虫 随机森林回归预测模型、链家二手房 可视化大屏 大数据毕业设计(附源码)✅
大数据·爬虫·python·随机森林·数据分析·spark·flask
TDengine (老段)9 小时前
什么是 TDengine IDMP?
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
Apache Flink10 小时前
Flink Forward Asia 2025 城市巡回 · 深圳站
大数据·flink
Hello.Reader10 小时前
Flink DataStream API 打包使用 MySQL CDC 连接器
大数据·mysql·flink
2021_fc10 小时前
Flink入门指南:使用Java构建第一个Flink应用
java·大数据·flink
Hello.Reader10 小时前
Streaming ELT with Flink CDC · Iceberg Sink
大数据·flink
RPA机器人就选八爪鱼10 小时前
RPA财务机器人:驱动财务数字化转型的核心引擎
大数据·运维·人工智能·机器人·rpa
2021_fc10 小时前
Flink快速入门--安装与示例运行
大数据·flink
J***Q29210 小时前
大数据存储优化策略
大数据