【发布时间】:2017-07-04 00:22:48
【问题描述】:
我正在尝试使用以下代码将数据框插入 Hive 表:
import org.apache.spark.sql.SaveMode
import org.apache.spark.sql._
val hiveCont = val hiveCont = new org.apache.spark.sql.hive.HiveContext(sc)
val empfile = sc.textFile("empfile")
val empdata = empfile.map(p => p.split(","))
case class empc(id:Int, name:String, salary:Int, dept:String, location:String)
val empRDD = empdata.map(p => empc(p(0).toInt, p(1), p(2).toInt, p(3), p(4)))
val empDF = empRDD.toDF()
empDF.registerTempTable("emptab")
我在 Hive 中有一个带有以下 DDL 的表:
# col_name data_type comment
id int
name string
salary int
dept string
# Partition Information
# col_name data_type comment
location string
我正在尝试将临时表插入到 hive 表中,如下所示:
hiveCont.sql("insert into parttab select id, name, salary, dept from emptab")
这是一个例外:
org.apache.spark.sql.AnalysisException: Table not found: emptab. 'emptab' is the temp table created from Dataframe
在这里,我了解到 hivecontext 将在 Spark 的“HIVE”上运行查询,但在那里找不到表,因此导致异常。但我不明白如何解决这个问题。谁能告诉我如何解决这个问题?
【问题讨论】:
-
table
party是从数据框创建的配置单元表或临时表?我从数据框中看到您创建了一个名为emptab的临时表 -
@SandeepSingh 更新了表名。
-
有直接保存到Hive Table的方法。我认为
saveAsTable和insertInto适用于 Spark 1.6。您是否尝试过使用它们? -
您使用的是哪个版本的 Spark 和 Scala?
-
@SandeepSingh Spark 版本:1.6.0
标签: scala apache-spark hive spark-dataframe