0
基本的に私が達成しようとしているのは、4列のテーブルがあり、DataFrame -DF1に公開しています。今度は、DF1の各行を別のハイブテーブル(基本的にはDF2 - Column1、Column2、Column3)に保存したいが、column3の値はDataFrame DF1の ' - 'で区切られた行になる。 Spark-ScalaでListまたはRDDのリストをDataFrameに変換する
val df = hiveContext.sql("from hive_table SELECT *")
val writeToHiveDf = df.filter(new Column("id").isNotNull)
var builder : List[(String, String, String)] = Nil
var finalOne = new ListBuffer[List[(String, String, String)]]()
writeToHiveDf.rdd.collect().foreach {
row =>
val item = row.mkString("[email protected]")
builder = List(List("dummy", "NEVER_NULL_CONSTRAINT", "some alpha")).map{case List(a,b,c) => (a,b,c)}
finalOne += builder
}
は今、私は私が直接、またはRDDを経由してデータフレームに変換したいリストのリストとして
finalOneを持っています。
var listRDD = sc.parallelize(finalOne) //Converts to RDD - It works.
val dataFrameForHive : DataFrame = listRDD.toDF("table_name", "constraint_applied", "data") //Doesn't work
エラー:
java.lang.ClassCastException: org.apache.spark.sql.types.ArrayType cannot be cast to org.apache.spark.sql.types.StructType
at org.apache.spark.sql.SQLContext.createDataFrame(SQLContext.scala:414)
at org.apache.spark.sql.SQLImplicits.rddToDataFrameHolder(SQLImplicits.scala:94)
いくつかのいずれかは、私がデータフレームにこれを変換する正しい方法を理解するのに役立ちます。あなたのサポートのために事前にトンをありがとう。
あなたは文字列型またはタイプの1列の3列、データフレームを持っているために何スキーマを期待しています要素が構造体(3文字列)の配列? –