如何修复异常:在 Hive serde table 中保存数据 请使用 insertInto() API 作为替代方法。 Spark: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

我们正在尝试使用 saveAsTable() 方法将 Dataframe 保存到 Hive Table。但是,我们得到以下异常。我们正在尝试将数据存储为 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 我没有看到任何问题。

Table定义

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')

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