monoically_increing_id函数在Spark中的行为解释



我已经使用monotonically_increasing_id()很长时间了,我刚刚发现了一个奇怪的行为,我需要解释一下。

我有一个20000行的df

我添加了一个Id列:

val df2 = df.withColumn("Id", monotonically_increasing_id().cast("int"))

惊讶的是,我没有得到单调递增的Id,我发现5行Id=1, 2行Id=2 ....

所以我认为这可能是因为Spark分发了我的数据框架,以确保我做了以下操作:

val df2 = df.coalesce(1).withColumn("Id", monotonically_increasing_id().cast("int"))

奇怪的行为消失了。

我的想法对吗?monotonically_increasing_id()不自动管理数据帧重分区吗?

为什么我以前没有遇到过这个行为,我总是使用更大的数据帧,从来没有遇到过这个错误。

感谢

这可能与整数溢出有关,因为单调递增_id返回一个长数据类型。

最新更新