【问题标题】:Unable to save dataframe as hive table from spark which is throwing serde exception无法从引发 serde 异常的 spark 将数据帧保存为配置单元表
【发布时间】: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 试试看是否有效

标签: scala apache-spark hive hiveql spark-dataframe


【解决方案1】:

当我试图覆盖在此处查找现有表“myTable”时发生上述异常(但它不存在),因此要创建一个新表,我们必须使用 saveMode.Ignore 或 ErrorIfExists。您可以通过映射路径在选项中提及数据库名称

【讨论】:

    【解决方案2】:

    首先设置hcontext.sql("使用数据库") 你不能把数据库放在 saveAsTable 中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 2017-06-28
      • 2016-09-29
      相关资源
      最近更新 更多