如何修复异常:在 Hive serde 表中保存数据 请使用 insertInto() API 作为替代方法。火花:2.1.0

Posted

技术标签:

【中文标题】如何修复异常:在 Hive serde 表中保存数据 请使用 insertInto() API 作为替代方法。火花:2.1.0【英文标题】:How to fix the Exception: Saving data in the Hive serde table Please use the insertInto() API as an alternative. Spark:2.1.0 【发布时间】:2018-04-20 09:37:21 【问题描述】:

我们正在尝试使用 saveAsTable() 方法将 Dataframe 保存到 Hive 表中。但是,我们得到了以下异常。我们正在尝试将数据存储为TextInputFormat

Exception in thread "main" org.apache.spark.sql.AnalysisException: Saving data in the Hive serde table `cdx_network`.`inv_devices_incr` is not supported yet. Please use the insertInto() API as an alternative..;


reducedFN.write().mode(SaveMode.Append).saveAsTable("cdx_network.alert_pas_incr");

我试过insertInto()enableHiveSupport() 并且它有效。但是,我想使用saveAsTable()

我想了解为什么saveAsTable() 不起作用。我尝试浏览文档和代码。没有得到太多的理解。它应该工作。我见过使用 Parquet 格式的人提出的问题,但对于 TextFileInputFormat 我没有看到任何问题。

表定义

CREATE TABLE `cdx_network.alert_pas_incr`(
  `alertid` string,
  `alerttype` string,
  `alert_pas_documentid` string)
ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'maprfs:/apps/cdx-dev/alert_pas_incr'
TBLPROPERTIES (
  'COLUMN_STATS_ACCURATE'='\"BASIC_STATS\":\"true\"',
  'numFiles'='0',
  'numRows'='0',
  'rawDataSize'='0',
  'totalSize'='0',
  'transient_lastDdlTime'='1524121971')

【问题讨论】:

您是否尝试过使用 insertInto 方法? enableHiveSupport() 在您的 sparkSession 中是否处于活动状态? 嘿@DanilaZharenkov 我已经更新了帖子。 你能显示'show create table cdx_network.alert_pas_incr'的输出吗?该表是否分区?是 'reducedFN' RDD 还是 Dataset/Dataframe? 是的 'reducedFN' 是一个数据集。 看起来这是错误。我做了一点研究,发现了这个问题issues.apache.org/jira/plugins/servlet/mobile#issue/SPARK-19152。固定版本为 2.2.0。很遗憾我无法验证,因为我公司的集群使用的是 2.1.0 版本。 【参考方案1】:

看起来这是错误。我做了一点研究,发现了这个问题SPARK-19152。固定版本为 2.2.0。很遗憾我无法验证,因为我公司的集群使用的是 2.1.0 版本

【讨论】:

以上是关于如何修复异常:在 Hive serde 表中保存数据 请使用 insertInto() API 作为替代方法。火花:2.1.0的主要内容,如果未能解决你的问题,请参考以下文章

HIVE Row Formats和SerDe

XML使用Serde hows类没有找到问题,将其提取到Hive表中

Hive之序列化与反序列化(SerDe)

Hive Bug修复:ORC表中array数据类型长度超过1024报异常

Hive 如何存储数据,啥是 SerDe?

无法从引发 serde 异常的 spark 将数据帧保存为配置单元表