无法从引发 serde 异常的 spark 将数据帧保存为配置单元表
Posted
技术标签:
【中文标题】无法从引发 serde 异常的 spark 将数据帧保存为配置单元表【英文标题】:Unable to save dataframe as hive table from spark which is throwing serde exception 【发布时间】:2016-01-04 08:33:42 【问题描述】:我已在数据框中加载我的一个表并尝试将其保存为配置单元表
var RddTableName= objHiveContext.sql("select * from tableName")
val dataframeTable = RddTableName.toDF()
dataframeTable.write.format("orc").mode(SaveMode.Overwrite).saveAsTable("test.myTable")
我遇到了异常 org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: 找不到字段 mytable 从 [public java.util.ArrayList org.apache.hadoop.hive.serde2.ColumnSet.col]
【问题讨论】:
您的表中是否有任何名称为“mytable”的字段?而这个字段的数据类型是什么? 您使用的是哪个版本的 spark? @Sumit: 没有名为 myTable 的列,我在 saveAsTable("test.myTable") 中给出了 test 是我的数据库名称,我尝试使用 SaveMode.Ignore 和 SaveMode.ErrorIfExits 它正在创建但正在创建在默认数据库中,火花版本 1.4.1 在 IgnoreMode 中保存时表示表已经退出,但我无法在配置单元表列表中查看............将任务 'attempt_201601040502_0000_m_000000_0' 的输出保存到 hdfs:// hadoop1.domain.com:8020/apps/hive/warehouse/test.db/mytable/_temporary/0/task_201601040502_0000_m_000000 我不太确定在使用 Hive 上下文时是否可以提供数据库名称。 1.5 中存在一个错误,在 1.6 中已解决。你能用 1.6 试试看是否有效 【参考方案1】:当我试图覆盖在此处查找现有表“myTable”时发生上述异常(但它不存在),因此要创建一个新表,我们必须使用 saveMode.Ignore 或 ErrorIfExists。您可以通过映射路径在选项中提及数据库名称
【讨论】:
【参考方案2】:首先设置hcontext.sql("使用数据库") 你不能把数据库放在 saveAsTable 中
【讨论】:
以上是关于无法从引发 serde 异常的 spark 将数据帧保存为配置单元表的主要内容,如果未能解决你的问题,请参考以下文章
Spark SQL - 转换为数据集列的 UUID 引发解析异常
spark pyspark mllib 模型 - 当使用 map 生成预测 rdd 时,它会在 collect() 上引发异常
Spark SQL createDataFrame() 引发 OutOfMemory 异常
在 Spark 2.4 上的 pyspark.sql.functions.max().over(window) 上使用 .where() 会引发 Java 异常