我正在尝试向数据框添加新列。新列包含随机双精度值。问题是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)
答案 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|
+---+-----+-------------------+