2016-07-19 2 views
0

Spark 1.6, versuche ich Arrays zu einem Hive-Tabelle myTable bestehend aus zwei Säulen, die jeweils Typ speichern array<double>:Spark-Schreibspalten Array <double> Tabelle Hive

val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc) 
import sqlContext.implicits._ 

val x = Array(1.0,2.0,3.0,4.0) 
val y = Array(-1.0,-2.0,-3.0,-4.0) 

val mySeq = Seq(x,y) 
val df = sc.parallelize(mySeq).toDF("x","y") 
df.write.insertInto("myTable") 

Aber dann bekomme ich die Meldung :

error: value toDF is not a member of org.apache.spark.rdd.RDD[Array[Double]] 
       val df = sc.parallelize(mySeq).toDF("x","y") 

Was ist der richtige Weg, um diese einfache Aufgabe zu tun?

Antwort

0

ich die tatsächliche Struktur gehe davon aus Sie nach wie folgt aussieht gehen: x | y 1,0 | -1,0 2,0 | -2,0 3.0 | -3,0 4.0 | -4,0

Hierzu der Code, den Sie dies wollen, ist:

val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc) 
import sqlContext.implicits._ 

val x = Array(1.0,2.0,3.0,4.0) 
val y = Array(-1.0,-2.0,-3.0,-4.0) 

val mySeq = x.zip(y) 
val df = sc.parallelize(mySeq).toDF("x","y") 
df.write.insertInto("myTable") 

Im Grunde brauchen Sie eine Sammlung von Zeilen wie Objekte (zB: Array [Zeile]). Es wäre besser, eine Fallklasse zu verwenden, wie in einem anderen Kommentar erwähnt, und nicht nur das Tupel.

Verwandte Themen