| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> pyspark给hive表增加自增列 -> 正文阅读 |
|
[大数据]pyspark给hive表增加自增列 |
一般增加自增列可以考虑row_number() over(partition by XX order by XX) as rank 但是需要给hive表全局加上自增列,并且没有字段可供排序时,partition by和order by后无表字段可用。 这种情况只能考虑用row_number() over(order by 1),即每一行记录多出个1,然后对1进行排序,取排序号作为自增id列,但是这样结果会出现一个问题: 记录结果会被打乱,因为无论spark还是mr本质是分布式进行的,运行多个task,每个task读取数据表一部分的数据,进行order by1处理,最后再来一次归并排序,因为排序字段都是1,所以结果会按照多个task的结果进行union,由于task是shuffle后随机出来的,所以union的最终结果,其记录与原始记录的顺序肯定不一致。 要解决这个问题,需要让spark只开启一个task去处理读取的所有表数据,即重分区为1,然后再去用row_number() over(order by 1) as rank去获取自增列。
这里/*+ XXX */,中间存储的是重分区算子coalesce(1);这种方式能设置的算子有限,一般就是sql中用于设置重分区。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 11:28:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |