首页 > 解决方案 > spark中随机初始化的数据帧

问题描述

我需要创建一个包含 n 行的数据框,并且一行的每一列值随机初始化为 0/1。一个示例数据框将是:

+----+----+----+
| id | c1 | c2 |
+----+----+----+
|  1 |  0 |  1 |
|  2 |  1 |  1 |
|  3 |  1 |  0 |
+----+----+----+

目前我正在使用以下程序:

代码如下:

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())
}

上述方法是否会损害性能(运行时间)?有没有更好的方法来做到这一点?

标签: scalaapache-sparkfor-loopfunctional-programmingapache-spark-sql

解决方案


有一个DataFrameIterablescala 中创建的隐式方法,您可以使用提供的方法,它由元组组成。以下代码:

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|
+---+---+---+

您可以正确提供架构/重命名列。关于为什么这些内部结构必须是元组的更多信息可以在这个答案中找到。


推荐阅读