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

ho due array come sopra, ho bisogno di costruire un dataframe da questo array come il seguente,come creare DataFrame da più array in Spark Scala?

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

A partire da ora sto cercando con StringBuilder a Scala. che non va come previsto. aiutami su questo per favore.

risposta

5

prova per esempio

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

e quindi

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

Uso parallelize si ottiene un RDD di tuple - il primo elemento dalla prima matrice, il secondo elemento dall'altro matrice - , che viene trasformato in un dataframe di righe, una riga per ogni tupla.

Aggiornamento

Per dataframe'ing più array (tutti con le stesse dimensioni), per esempio 4 array, in considerazione

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

olmo ciao, supponiamo di avere quattro array come questo come posso farlo? – Sam

+0

'val xs = Array (a1, a2, a3, a4) .transpose' e ​​quindi per ogni array nidificato costruisci la classe del caso, parallelizza le classi case e poi toDF (...). – elm

+0

Mi dispiace @elm, non lo capisco, puoi fornire un campione per questo. perdonami, sono nuovo di scintilla scala. 'val xs = Array (a1, a2, a3, a4) .transpose'' sc.parallelize (xs (0) zip xs (1), xs (2), xs (3)). toDF ("a", " b "," c "," d ") '. questo è il codice che ho provato – Sam