2016-05-11 2 views
7
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) 

У меня есть два Массивы как выше, мне нужно построить DataFrame из этих массивов, как в следующем,Как создать DataFrame из нескольких массивов в Spark Scala?

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

В настоящее время я пытаюсь с StringBuilder в Scala. который не идет так, как ожидалось. Помогите мне в этом, пожалуйста.

ответ

5

Попытка, например

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 кортежей - первый элемент из первого массива, второй элемент из другого массива - , который преобразуется в dataframe строк, по одной строке для каждого кортежа.

Update

Для 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") 
+0

привет вяз, предположим, что у меня есть четыре массива, как это как Я могу это сделать? – Sam

+0

'val xs = Array (a1, a2, a3, a4) .transpose', а затем для каждого класса case вложенного массива, распараллеливайте классы case, а затем вDF (...). – elm

+0

Извините @elm, я не получаю его, вы можете предоставить образец для него. простите меня, я новичок в искрах. 'val xs = Array (a1, a2, a3, a4) .transpose' 'sc.parallelize (xs (0) zip xs (1), xs (2), xs (3)) .DD (" a "," b "," c "," d ") '. это код, который я пробовал – Sam

Смежные вопросы