web-dev-qa-db-ja.com

Spark Scalaで複数の配列からDataFrameを作成する方法は?

val tvalues: Array[Double] = Array(1.866393526974307, 2.864048126935307, 4.032486069215076, 7.876169953355888, 4.875333799256043, 14.316322626848278)
val pvalues: Array[Double] = Array(0.064020056478447, 0.004808399479386827, 8.914865448939047E-5, 7.489564524121306E-13, 2.8363794106756046E-6, 0.0)

上記のように2つの配列があります。次のように、この配列からDataFrameを構築する必要があります。

Tvalues                Pvalues
1.866393526974307      0.064020056478447
2.864048126935307      0.004808399479386827
......                 .....

現在のところ、私はScalaでStringBuilderを試しています。期待どおりに進みません。これで私を助けてください。

11
Sam

たとえば試してみてください

val df = sc.parallelize(tpvalues Zip pvalues).toDF("Tvalues","Pvalues")

したがって

scala> df.show
+------------------+--------------------+
|          Tvalues|             Pvalues|
+------------------+--------------------+
| 1.866393526974307|   0.064020056478447|
| 2.864048126935307|0.004808399479386827|
| 4.032486069215076|8.914865448939047E-5|
| 7.876169953355888|7.489564524121306...|
| 4.875333799256043|2.836379410675604...|
|14.316322626848278|                 0.0|
+------------------+--------------------+

parallelizeを使用して、RDDのタプル(最初の配列の最初の要素、もう1つの配列の2番目の要素)を取得します。これは、行のデータフレームに変換されます。各タプル。

更新

dataframe'ing複数の配列(すべて同じサイズ)、たとえば4つの配列の場合、

case class Row(i: Double, j: Double, k: Double, m: Double)

val xs = Array(arr1, arr2, arr3, arr4).transpose
val rdd = sc.parallelize(xs).map(ys => Row(ys(0), ys(1), ys(2), ys(3))
val df = rdd.toDF("i","j","k","m")
12
elm