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

时间:2018-04-20 09:37:21

标签: java spark-dataframe spark-streaming

我们正尝试使用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')

1 个答案:

答案 0 :(得分:1)

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