将DataFrame加载到Hive分区时未找到表错误

时间:2017-06-23 05:05:49

标签: scala apache-spark

我正在尝试将数据插入到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;

有人能告诉我我在这里做的错误是什么,我该怎么纠正呢?

1 个答案:

答案 0 :(得分:1)

要将数据写入Hive仓库,您需要初始化hiveContext实例。

执行此操作后,将从Hive-Site.xml(来自classpath)获取confs;并连接到底层的Hive仓库。

HiveContextSQLContext的扩展,用于支持和连接到配置单元。

为此,试试这个::

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")