mysql 与 spark sql 语法大致相通。但是会有一些坑存在。比如 group by
·
需求场景:
在视屏表中,取每个作者最新的一条数据。
即, 筛选出 所有  user_id对应的  最新的(通过create_time 倒序取)一条数据。
·
mysql中:
select user_id,site,create_time
from ( select user_id, site, create_time   from table_videowhere dt =20210909 and user_id is not null order by create_time desc ) a
group by user_id
·
mysql --> Spark 产生异常:
但是, 同样的代码 进入 spark 就会报异常:
org.apache.spark.sql.AnalysisException:
expression 'a.`site`' is neither present in the group by, nor is it an aggregate function.
Add to group by or wrap in first() (or first_value)
·

网上搜索后得知:
mySQL 语句中少了一个分组,   spark 中的sql用的是美式标准的sql。
说是需要将 查询的字段,都加在 group by 后面:
select user_id,site,create_time
from ( select user_id, site, create_time   from table_videowhere dt =20210909 and user_id is not nullorder by create_time desc ) a
group by user_id,site,  create_time

但最终查询的结果并不满足我们场景需要的内容:
`
最终分组是根据 三列属性来分组,如果他们的数据个数分别是:k、m、n个,那查询的行数是 k*m*n个;
不符合我们期待的k个user_id对应的最新记录。
`
正确解决: 
在spark中,site等 几列在 group by user_id  时,会有多个查询结果:
  • 如果都需要,就获取其余几列对应的属性值集合: collect_set(site), collect_list(create_time)  -- 前者去重,后者不去重
  • 如果不需要全部,只是取随机一行里的属性值:first(site)   【不同于 MySQL 默认的第一行】
·
Spark中:
select user_id, first(site), first(create_time)
from ( select user_id, site, create_time   from table_videowhere dt =20210909 and user_id is not null order by create_time desc ) a
group by user_id

·

Spark中复杂嵌套:
如果外部有嵌套,最好给几列属性,内部另起别名/或者 外部也得使用 dtpv.first(site) 。否则在外面 直接用 dtpv.site 会报错
select  dta.user_id, dta.user_name, dtpv.site,  dtpv.create_time as update_time
from tv_author AS dta
LEFT JOIN (select user_id, first(site) as site, first(create_time) as create_timefrom ( select user_id,site,create_time   from  table_videowhere dt =20210909 and user_id is not null order by create_time desc ) agroup by user_id
) AS dtpv
on dtpv.user_id = dta.user_id
where dta.dt = 20210909

spark踩坑记录 (一) group by相关推荐

  1. Spark踩坑填坑-聚合函数-序列化异常

    Spark踩坑填坑-聚合函数-序列化异常 一.Spark聚合函数特殊场景 二.spark sql group by 三.Spark Caused by: java.io.NotSerializable ...

  2. Spark踩坑记——数据库(Hbase+Mysql)转

    转自:http://www.cnblogs.com/xlturing/p/spark.html 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库 ...

  3. mysql 使用sum limit_mysql踩坑记录之limit和sum函数混合使用问题

    问题复盘 本次复盘会用一个很简单的订单表作为示例. 数据准备 订单表建表语句如下(这里偷懒了,使用了自增ID,实际开发中不建议使用自增ID作为订单ID) CREATE TABLE `order` ( ...

  4. 日常踩坑记录-汇总版

    开发踩坑记录,不定时更新 心得 RTFM 严谨的去思考问题,处理问题 严格要求自己的代码编写习惯与风格 注意 单词拼写 20200207 mybatis plus 自带insert插入异常 sql i ...

  5. 【mysql】 踩坑记录之derived(派生表)

    文章目录 前言 出现的问题 如何解决 方法一:改写sql 方法二:改写sql 方法三:改写sql 前言 很多时候我们常常感觉到,不要你以为,mysql要它以为.记录派生表踩坑记录. 首先说明环境mys ...

  6. 【踩坑记录】仿真环境使用小车进行Cartographer 3D Slam(深度摄像头)

    [运行背景] ROS1 20.04 noetic 安装cartographer请看: [安装学习]安装Cartographer ROS(noetic)_Howe_xixi的博客-CSDN博客网上使用n ...

  7. Slam学习笔记——ROS踩坑记录

    Slam学习笔记--ROS踩坑记录 1. 安装 2. ROS文件系统 2.1 工作区 2.2 包package 2.2.1 包的操作 2.2.2 描述文件package.xml 2.3 节点node ...

  8. pyspark——functions.when踩坑记录

    pyspark--functions.when踩坑记录 背景介绍 案例分享 背景介绍 我们一般认知觉得判断逻辑在后的会覆盖判断逻辑在前的判断结果,可是结果是枉然 案例分享 下面展示一些 内联代码片. ...

  9. TX2 配置jupyterhub踩坑记录

    TX2 配置jupyterhub踩坑记录 问题描述: 参考教程1和教程2进行安装,报错提示如下(应该是连不上本地http://127.0.0.1:8001/api/routes).但使用lsof -i ...

最新文章

  1. 10个机器学习的JavaScript示例
  2. 线性表----单链表
  3. Python攻克之路-random模块
  4. 牛客一 K-Knowledge Test about Match
  5. asp.net webform 局部发布更新
  6. python日历模块_Python日历模块| setfirstweekday()方法与示例
  7. Intel Sandy Bridge/Ivy Bridge架构/微架构/流水线 (19) - 系统代理
  8. mysql的安装、启动和基础配置 —— mac版本
  9. 炼丹手册——学习率设置
  10. Android Material Design按钮样式设计
  11. 百面机器学习—3.逻辑回归与决策树要点总结
  12. 海思Hi3518EV200 SDK源码分析笔记
  13. 博图v15编程手册_好消息!全套西门子plc编程软件,案例和说明书下载
  14. SQL练习:查询各科成绩前三名的记录
  15. 【C/C++学习】之内存分配(new,operator new,placement new)详解
  16. 机器学习作业之波士顿房价(boston)数据分析与绘图(注释我都写了这么多,我不信你还看不懂?)
  17. matplotlib的简介
  18. 【檀越剑指大厂--redis】redis基础篇
  19. 怎么做软件开发,软件开发流程八个步骤
  20. 测试ip 或者 ip+端口 是否畅通

热门文章

  1. 基于机器视觉技术快速准确地分类优秀劣质大豆品种
  2. 任何颜色,只要它是白色的—可以是我们需要的明确的颜色质量指标吗?---凯利讯半导体
  3. 如何避免新代码变包袱?阿里通用方法来了!
  4. 《Python深度学习》读书笔记
  5. 人脸口罩识别的项目总结
  6. 酷瓜云课堂局域网课程点播+直播系统
  7. poj3104 Drying(二分最大化最小值 好题)
  8. C/C++快速入门图形化教学法简介(目录)
  9. 【渝粤教育】电大中专跨境电子商务理论与实务 (11)作业 题库
  10. 推荐几个Github中国区排名前100的公众号