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

Ich habe zwei Arrays, wie oben, ich brauche einen Datenrahmen von dieser Arrays wie die folgenden zu bauen,Wie erstellt man DataFrame aus mehreren Arrays in Spark Scala?

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

Ab jetzt habe ich mit StringBuilder in Scala versuchen. was nicht wie erwartet geht. Hilf mir bitte dabei.

Antwort

5

Versuch für Beispiel

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

und damit

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 wir die Verwendung eines RDD von Tupeln erhalten, - das erste Element aus dem ersten Array, das zweite Element aus dem anderen Array - , die in ein Datenfeld von Zeilen umgewandelt wird, eine Zeile für jedes Tupel.

aktualisieren

Für dataframe'ing mehrere Arrays (alle mit der gleichen Größe), zum Beispiel 4-Arrays, betrachten

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

hallo Ulme, nehme ich habe vier Arrays wie dies, wie kann ich das machen? – Sam

+0

'val xs = Array (a1, a2, a3, a4) .transpose' und dann für jede verschachtelte Array-Konstrukt-Fall-Klasse, case-Klassen und dann toDF (...) parallelisieren. – elm

+0

Sorry @elm, ich bekomme es nicht, können Sie eine Probe dafür bereitstellen. vergib mir, ich bin neu, scala zu entfachen. 'val xs = Array (a1, a2, a3, a4) .transparente' 'sc.parallelize (xs (0) zip xs (1), xs (2), xs (3)) toDF (" a "," b "," c "," d "). Dies ist der Code, den ich versuchte – Sam

Verwandte Themen