大数据处理框架-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|
+---+---+---+---+---+
相关推荐
AgentMaster8 小时前
车型平台数据口径不一、供应链追溯断链?4 款数据治理系统选型对比与汽车行业落地记录
大数据·人工智能·汽车·交通物流
starzy19908 小时前
Flink基础之有状态计算架构分析:状态存在哪、何时存、如何恢复
大数据·架构·flink
AbrahamCS8 小时前
告别无脑召回与死规则:基于国家标准(GB/T 48000.3)与大模型自主编排的 App 智能运营实战
大数据·人工智能·智能体·ontology
山西正方元8 小时前
西安商家公私域联动落地:品牌私域架构拆解与本地化适配
大数据·人工智能·#西安本地运营
腾视科技-AI8 小时前
腾视科技大模型一体机解决方案:低成本私有化落地,重塑行业智能应用新格局
大数据·人工智能·科技·ai·ai大模型·腾视科技·ai算力盒
Geeys8 小时前
拼多多商家客户端和网页版有哪些功能上的差异?
大数据·人工智能
IT毕设实战小研8 小时前
基于大数据的DAX40成分股金融新闻情感趋势可视化分析
android·大数据·python·考研·金融·课程设计
长谷深风1118 小时前
AI 的 Memory 到底该记什么?
大数据·人工智能·ai agent·智能体·工具调用·用户偏好·长期memory
龙亘川8 小时前
智赋能文旅领域治理|一网统管能做什么?文化服务管理系统四大场景拆解
大数据·人工智能
数智启示录8 小时前
Apache Kafka Consumer 扩到 40 个仍不提速:Partition 上限锁死有效并行度 【Kafka合集】
数据库·经验分享·分布式·缓存·面试·kafka·apache