scala - Spark HWC 无法写入现有表

标签 scala apache-spark hive save hdp

在 HDP 3.1.0 中,HWC hive-warehouse-connector- assembly-1.0.0.3.1.0.0-78.jar,我无法根据数据库追加(或覆盖)到现有表。

我在一个名为 DSN 的数据上进行了测试,它可以工作,而在另一个名为 CLEAN_CRYPT 的数据库上则失败。 两个数据库都是加密的 + kerberos

import com.hortonworks.spark.sql.hive.llap.HiveWarehouseSession._
import com.hortonworks.spark.sql.hive.llap.HiveWarehouseSession
val hive = com.hortonworks.spark.sql.hive.llap.HiveWarehouseBuilder.session(spark).build()
hive.execute("show databases").show()
hive.setDatabase("clean_crypt")
val df=hive.execute("select * from test")
df.write.format(HIVE_WAREHOUSE_CONNECTOR).option("table","test").mode("append").save

错误消息是“表已存在”。我尝试了覆盖模式但没有成功。 如果我放下 table ,它就会通过!!!

有什么想法吗?

最佳答案

这可能与多个用户报告的 HWC bug 有关 here .

我发现只有当您尝试在写入时使用 partitionBy 时才会发生这种情况,例如:

df.write.partitionBy("part")
.mode(SaveMode.Overwrite)
.format(com.hortonworks.hwc.HiveWarehouseSession.HIVE_WAREHOUSE_CONNECTOR)
.option("table", "`default`.`testout`").save;

另一方面,如果您删除 partitionBy 部分,分区将按预期工作(因为分区信息已存储在 Hive 表中),但如果您使用覆盖模式(而不是,对于例如,追加),HWC 将删除并重新创建您的表,并且不会重新应用分区信息。

关于scala - Spark HWC 无法写入现有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59946572/

相关文章:

scala - Scala 中的 'yield' 是否等同于 map 函数?

scala - 使用.reduceByKey()的Apache Spark NoSuchMethodError

java - 在 Java 中获取 Spark 中的当前任务 ID

python - 如何在 PySpark 中序列化 LabeledPoint RDD?

hadoop - hive 中的 Parquet 字符串到时间戳转换

azure - 需要多少个 Hive 动态分区?

arrays - 数组的startsWith 语义

java - 从 unwrapped() 获得的 java ArrayList 转换为 Scala 列表

apache-spark - 尝试将 Spark 1.6.X Parquet 读入 Spark 2.X 的警告

hadoop - 运行 Hive 查询的问题