如何修复异常:在 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的主要内容,如果未能解决你的问题,请参考以下文章
XML使用Serde hows类没有找到问题,将其提取到Hive表中