首页 > 解决方案 > 使用随机双精度添加列时,Spark Dataframe 在所有行中都有重复值

问题描述

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

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

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

标签: scalaapache-sparkdataframe

解决方案


生成随机双精度值,而不是在列表中使用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|
+---+-----+-------------------+

推荐阅读