我正在尝试将数据插入到Hive表中,如下所示:
val partfile = sc.textFile("partfile")
val partdata = partfile.map(p => p.split(","))
val partSchema = StructType(Array(StructField("id",IntegerType,true),StructField("name",StringType,true),StructField("salary",IntegerType,true),StructField("dept",StringType,true),StructField("location",StringType,true)))
val partRDD = partdata.map(p => Row(p(0).toInt,p(1),p(2).toInt,p(3),p(4)))
val partDF = sqlContext.createDataFrame(partRDD, partSchema)
我导入的软件包:
import org.apache.spark.sql.Row
import org.apache.spark.sql.Row
import org.apache.spark.sql.types.{StructType,StructField,StringType,IntegerType}
import org.apache.spark.sql.types._
这就是我尝试将数据框插入Hive分区的方法:
partDF.write.mode(saveMode.Append).partitionBy("location").insertInto("parttab")
即使我有Hive表,我也会收到以下错误:
org.apache.spark.sql.AnalysisException: Table not found: parttab;
有人能告诉我我在这里做的错误是什么,我该怎么纠正呢?
答案 0 :(得分:1)
要将数据写入Hive仓库,您需要初始化hiveContext
实例。
执行此操作后,将从Hive-Site.xml
(来自classpath)获取confs;并连接到底层的Hive仓库。
HiveContext
是SQLContext
的扩展,用于支持和连接到配置单元。
为此,试试这个::
val hc = new HiveContext(sc)
在此实例上执行append-query
。
partDF.registerAsTempTable("temp")
hc.sql(".... <normal sql query to pick data from table `temp`; and insert in to Hive table > ....")
请确保表parttab
位于db - default
下。
如果另一个db下的表,表名应指定为:<db-name>.parttab
如果您需要将dataframe
直接保存到配置单元中;用这个:
df.saveAsTable("<db-name>.parttab")