当前位置: 首页 > article >正文

【踩坑】SparkSQL union/unionAll 函数的去重问题

【踩坑】SparkSQL union/unionAll 函数的去重问题

  • 测试数据
case class Employee(first_name:String)

val employeeDF1 = spark.createDataset(Seq( 
    Employee("Mary"), 
    Employee("Mandy"),
    Employee("Kurt")
))
val employeeDF2 = spark.createDataset(Seq( 
    Employee("Mary"), 
    Employee("Julie"), 
    Employee("Mandy"),
    Employee("Julie"), 
    Employee("Kurt")
))
  • 无论是union还是unionall都不会去重
employeeDF1.union(employeeDF2).show

在这里插入图片描述

employeeDF1.unionAll(employeeDF2).show

在这里插入图片描述

  • 当通过spark.sql执行方式时,union可以去重
employeeDF1.createOrReplaceTempView("ds1")
employeeDF2.createOrReplaceTempView("ds2")
spark.sql("select * from ds1 union select * from ds2").show

在这里插入图片描述

spark.sql("select * from ds1 union all select * from ds2").show

在这里插入图片描述

  • 误区
    • SQL标准查询语言 层面(如hive环境):union去重,unionAll简单合并性能较好
    • Spark union 默认按列的位置直接合并,很可能字段错误合并。可使用unionByName作为替代
    • 最新官方集合操作文档:https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-setops.html#set-operators

http://www.kler.cn/a/473397.html

相关文章:

  • 【微服务】1、引入;注册中心;OpenFeign
  • C++语言的面向对象编程
  • 如何在 Ubuntu 22.04 上安装 Cassandra NoSQL 数据库教程
  • 【网络安全 | 漏洞挖掘】通过监控调试模式实现价值$15k的RCE
  • 使用Registry explore实现法医检查练习
  • 最近在盘gitlab.0.先review了一下docker
  • JavaScript动态渲染页面爬取之Selenium
  • Elasticsearch:在 HNSW 中提前终止以实现更快的近似 KNN 搜索
  • 实习总结(经历篇)
  • 聚类系列 (二)——HDBSCAN算法详解
  • GO:sync.Map
  • springboot远程链接spark
  • 力扣 34. 在排序数组中查找元素的第一个和最后一个位置
  • SpringBoot3动态切换数据源
  • 基于springboot的网上商城购物系统
  • 2025.1.8(c++对c语言的扩充——堆区空间,引用,函数)
  • Mysql面试相关
  • 使用 vue3 赋值后视图没变化的问题
  • 蓝桥杯训练
  • T-SQL语言的语法
  • 使用 SQLite3 的基本操作步骤
  • Azkaban其一,介绍、体系架构和安装
  • Linux-----结构体与联合体,大小端模式
  • 高等数学学习笔记 ☞ 函数的求导法则
  • Maven核心与单元测试
  • Linux-Ubuntu之I2C通信