首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spark HWC无法写入现有表

spark HWC无法写入现有表
EN

Stack Overflow用户
提问于 2020-01-28 18:22:16
回答 2查看 776关注 0票数 2

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

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

代码语言:javascript
复制
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

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

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2020-05-07 14:36:02

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

我发现只有当你尝试在编写时使用partitionBy时,它才会发生,比如:

代码语言:javascript
复制
df.write.partitionBy("part")
.mode(SaveMode.Overwrite)
.format(com.hortonworks.hwc.HiveWarehouseSession.HIVE_WAREHOUSE_CONNECTOR)
.option("table", "`default`.`testout`").save;

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

票数 2
EN

Stack Overflow用户

发布于 2021-05-24 19:24:25

如果您希望使用Hortnoworks连接器并将其附加到已分区的表中,则不应该使用partitionBy,因为它似乎不能与此连接器一起正常工作。相反,您可以使用分区选项并为动态分区添加Spark参数。

示例:

代码语言:javascript
复制
import org.apache.spark.SparkConf
import com.hortonworks.spark.sql.hive.llap.HiveWarehouseBuilder
import com.hortonworks.spark.sql.hive.llap.HiveWarehouseSession.HIVE_WAREHOUSE_CONNECTOR
import org.apache.spark.sql.{SaveMode, SparkSession}

val sparkConf = new SparkConf()
  .setMaster("yarn")
  .setAppName("My application")
  .set("hive.exec.dynamic.partition", "true")
  .set("hive.exec.dynamic.partition.mode", "nonstrict")
val spark = SparkSession.builder()
  .config(sparkConf)
  .getOrCreate()

val hive = HiveWarehouseBuilder.session(spark).build()
val hiveDatabase = "clean_crypt")
hive.setDatabase(hiveDatabase)
val df = hive.execute("select * from test")

df
    .write
    .format(HIVE_WAREHOUSE_CONNECTOR)
    .mode(SaveMode.Append)
    .option("partition", partitionColumn)
    .option("table", table)
    .save()

对于以上内容,使用了hive-warehouse-connector-assembly-1.0.0.3.1.4.0-315.jar。如果该表不存在,连接器会创建它并(默认情况下)以ORC格式存储它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59946572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档