使用Spark 1.6,我尝试将Arrays保存到由两列组成的配置单元表myTable
中,每列类型为array<double>
:
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")
但后来我得到了消息:
error: value toDF is not a member of org.apache.spark.rdd.RDD[Array[Double]]
val df = sc.parallelize(mySeq).toDF("x","y")
完成这项简单任务的正确方法是什么?
我假设您要使用的实际结构如下:x|y1.0 |-1.02.0 |-2.03.0 |-3.04.0 |-4.0
为此,你想要的代码是:
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")
从本质上讲,您需要一组类似行的对象(例如:Array[row])。最好使用另一条注释中提到的case类,而不仅仅是元组。