当添加具有随机double的列时,Spark Dataframe在所有行中都有重复的值

时间:2019-04-26 15:49:12

标签: scala apache-spark dataframe

我正在尝试向数据框添加新列。新列包含随机双精度值。问题是DataFrame中所有行的新列中的值重复。我正在使用scala.util.Random类进行生成。

我试图简单地向数据框添加一个新列,就像在类似文章中建议的那样。我试图将DataFrame更改为Dataset并添加列。有一种可行的方法-在驱动程序上收集数据并将其添加到包含随机double的元组列表中,但是对于大量数据来说这是一个不好的解决方案,所以我不能使用此解决方案。

Spark版本2.2.0,我使用了spark-shell来实现

List(("a", 1), ("b", 2), ("c", 3))
.toDF("str", "digit")
.withColumn("random", lit(scala.util.Random.nextDouble))
.show(10)

这是结果 https://i.imgur.com/ziBTbQ9.png

1 个答案:

答案 0 :(得分:2)

要生成随机双精度值而不是使用 withColumn ,请在列表中指定 scala.util.Random

例如:

val rnd_df=List(("1",9,Some(scala.util.Random.nextDouble)),
                ("1",9,Some(scala.util.Random.nextDouble)))
          .toDF("str","digit","random")
rnd_df.show(false)

Result:

+---+-----+------------------+
|str|digit|random            |
+---+-----+------------------+
|1  |9    |0.7370861605665576|
|1  |9    |0.5691922799783725|
+---+-----+------------------+

更新:

rand()功能中使用 withColumn

List(("a", 1), ("b", 2), ("c", 3))
.toDF("str", "digit")
.withColumn("random", lit(rand()))
.show(10)

Result:

+---+-----+-------------------+
|str|digit|             random|
+---+-----+-------------------+
|  a|    1| 0.5952030024781159|
|  b|    2| 0.9646080878588672|
|  c|    3|0.21797137458332738|
+---+-----+-------------------+