我正在尝试使用以下代码将Dataframe插入到配置单元表中:
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
我正在尝试将临时表插入到配置单元表中,如下所示:
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”上运行查询,但在那里找不到表,因此产生异常。但我不明白我怎样才能解决这个问题。能告诉我怎么修吗?
2条答案
按热度按时间wixjitnu1#
您正在隐式地将rdd转换为dataframe,但没有导入隐式对象,因此rdd不会转换为dataframe。在导入中包括以下行。
此外,案例类必须在顶层定义-它们不能嵌套。所以你的最终代码应该是这样的:
如果您正在转换
String
至Integer
. 我已经包括在上面的代码以及。aiazj4mn2#
registerTempTable("emptab")
:这行代码用于在spark中而不是在hive中创建表临时表。要将数据存储到配置单元,必须首先在配置单元中显式创建一个表。要将表值数据存储到配置单元表,请使用以下代码: