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(&#