scala - spark中随机初始化的数据帧
问题描述
我需要创建一个包含 n 行的数据框,并且一行的每一列值随机初始化为 0/1。一个示例数据框将是:
+----+----+----+
| id | c1 | c2 |
+----+----+----+
| 1 | 0 | 1 |
| 2 | 1 | 1 |
| 3 | 1 | 0 |
+----+----+----+
目前我正在使用以下程序:
- 创建空数据框
- 生成单个序列
- 使用 union() 附加到现有数据框
代码如下:
for (k <- 0 until n) {
var newRow = k+:Seq.fill(N)(Random.nextInt(2)) // random fill with 0/1 and appending id
X = X.union(newRow.toDF())
}
上述方法是否会损害性能(运行时间)?有没有更好的方法来做到这一点?
解决方案
有一个DataFrame
从Iterable
scala 中创建的隐式方法,您可以使用提供的方法,它由元组组成。以下代码:
val a = (for (_ <- 0 until 5) yield Seq.fill(3)(Random.nextInt(2)))
.map(x => (x(0), x(1), x(2)))
import spark.implicits._
a.toDF.show
给出以下结果:
+---+---+---+
| _1| _2| _3|
+---+---+---+
| 0| 1| 1|
| 1| 0| 0|
| 0| 0| 0|
| 0| 1| 0|
| 1| 1| 1|
+---+---+---+
您可以正确提供架构/重命名列。关于为什么这些内部结构必须是元组的更多信息可以在这个答案中找到。
推荐阅读
- c - 将消息翻译成 B1FF 语言时出现问题
- ssh - 通过 ssh 进行 cpanel 完整备份,但以 cpanel 用户身份登录
- javascript - 如何让机器人响应频道提及?
- tkinter - Tkinter 串行输入数据
- javascript - Nightwatch .element() 总是使用数组中的最后一个值
- javascript - 如何在嵌套的 for of 循环中进行提取
- mongodb - 在 mongo 聚合调用中添加字典的值
- jakarta-ee - 如何在 Wildfly 的 Qpid 6.1.7 资源适配器中禁用 XA
- python - 使用 selenium,我怎样才能只找到前 N 个元素以更快地运行?
- ansible - Ansible 变量替换与任务委托相结合