我想为我的数据集行分配一个唯一的ID。我知道有两个实现选项:
import org.apache.spark.sql.expressions.Window;
ds.withColumn("id",row_number().over(Window.orderBy("a column")))
df.withColumn("id", monotonically_increasing_id())
第二个选项不是顺序ID,也没有关系。
我试图弄清楚这些实现是否存在任何性能问题。也就是说,如果其中一个选项与另一个选项相比非常慢。更有意义的是:“monotonically_increasing_id在row_number上非常快,因为它不是顺序的或...”
最佳答案
monotically_increasing_id
是分布式的,它根据数据的分区执行。
然而
使用不带row_number()
的Window
函数的partitionBy
(如您的情况)不会分发。当我们不定义partitionBy
时,所有数据都发送给一个执行程序以生成行号。
因此,对于来说,可以确定的是monotically_increasing_id()
的性能将比没有定义的row_number()
的partitionBy
更好。
关于scala - Spark数据集唯一ID的性能-row_number与monotonically_increasing_id,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48500442/