Scala 如何在spark中使用不可变数据帧在运行时生成大量随机数

Scala 如何在spark中使用不可变数据帧在运行时生成大量随机数,scala,apache-spark,Scala,Apache Spark,我有一个问题,我需要为运行在spark中的应用程序生成数百万个唯一的随机数。由于数据帧是不可变的,所以每次我添加生成的数字时,我都会对现有的数据帧进行并集,从而创建一个新的数据帧。由于需要数百万个数字,这可能会导致性能问题。是否有任何可变数据结构可用于此需求 我已经尝试使用dataframes与现有dataframe进行联合,您可以使用以下代码生成具有数百万个唯一随机数的dataframe import scala.util.Random val df = Random.shuf

我有一个问题,我需要为运行在spark中的应用程序生成数百万个唯一的随机数。由于数据帧是不可变的,所以每次我添加生成的数字时,我都会对现有的数据帧进行并集,从而创建一个新的数据帧。由于需要数百万个数字,这可能会导致性能问题。是否有任何可变数据结构可用于此需求


我已经尝试使用dataframes与现有dataframe进行联合,您可以使用以下代码生成具有数百万个唯一随机数的dataframe

    import scala.util.Random
    val df = Random.shuffle((1 to 1000000)).toDF
    df.show(20)
我曾经尝试过用一百万个唯一的随机数生成一个数据帧,几乎不需要1-2秒

+------+
| value|
+------+
|204913|
|882174|
|407676|
|913166|
|236148|
|788069|
|176180|
|819827|
|779280|
| 63172|
|  3797|
|962902|
|775383|
|583273|
|172932|
|429650|
|225793|
|849386|
|403140|
|622971|
+------+
only showing top 20 rows

我创建的数据帧看起来像这样。希望这能满足您的需求。

您可以尝试使用单调增量ID函数(org.apache.spark.sql.functions.单调增量ID)。我想它应该能解决你的问题。你已经编辑了答案,生成了唯一的随机数。