scala - 使用随机双精度添加列时,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)
解决方案
生成随机双精度值,而不是在列表中使用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|
+---+-----+-------------------+
推荐阅读
- pact-lang - 在函数中键入变量
- php - 数据表网 | 表 id=tbl_portfolio - 无效的 JSON 响应
- android - 为什么在 onResume 中调用 startLocationUpdates,在 onPause 中调用 stopLocationUpdates?
- google-chrome - 扩展上下文无效。Chrome 扩展程序
- javascript - AWS API Gateway CORS-header 'Access-Control-Allow-Origin' 缺失
- svg - 如何优化 SVG 路径?
- python - 我的项目在 conda 环境中使用什么包
- java - 从 Java 运行时调用 Python 脚本 OSError
- django - Django 类视图 - MultipleObjectsReturned 错误
- sql - 完成状态出现 2 次及以上时的返回值