spark DataFrame新增一列id列(单调递增,不重复)的几种方法

本文介绍了四种在Spark DataFrame中添加单调递增且不重复的ID列的方法:1) 使用`monotonically_increasing_id()`,不保证全局连续;2) 通过`row_number().over(Window.orderBy(ColName))`实现排序后连续ID,但会改变分区数;3) 转换为RDD使用`zipWithIndex()`或`zipWithUniqueId()`,保持分区数不变;4) 使用map遍历数据生成ID。
摘要由CSDN通过智能技术生成

1.使用functions里面的monotonically_increasing_id(),生成单调递增,不保证连续,最大64bit,的一列.分区数不变。

import org.apache.spark.sql.functions._
val df1 = spark.range(0,1000).toDF("col1")
val df2 = df1.withColumn("id", monotonically_increasing_id())

注意:有多个分区的时候,每个分区里面是单调递增,step为1,分区之间不保证连续,如一共两个分区,0分区id是0-499,1分区id可能99000-99499,甚至更大,最大64bit的integer。

如果想要整体连续,可以先repartition(1),操作完后在repartition(n)

 

2.使用row_number().over(Window.orderBy(ColName)),生成按某列排序后,新增单调递增,连续的一列。操作完后分区数变为1。id列从1开始。

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions.row_number

val df1 = spark.range(0,1000).toDF(&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值