【问题标题】:Bucketby Property with Spark saveastable method taking spark 'default' database instead of hive database: HDP 3.0具有 Spark saveastable 方法的 Bucketby 属性采用 spark 'default' 数据库而不是 hive 数据库:HDP 3.0
【发布时间】:2020-05-27 16:53:25
【问题描述】:

我正在使用 saveAsTable 方法保存 Spark DataFrame 并编写以下代码。

    val options = Map("path" -> hiveTablePath)
    df.write.format("orc")
    .partitionBy("partitioncolumn")
    .options(options)
    .mode(SaveMode.Append)
    .saveAsTable(hiveTable)

它工作正常,我可以在 hive 表中看到数据。但是当我使用另一个属性 bucketby(5,bucketted_column)

    df.write.format("orc")
    .partitionBy("partitioncolumn")
    .bucketby(5,bucketted_column)
    .options(options)
    .mode(SaveMode.Append)
    .saveAsTable(hiveTable)

它试图将其保存在 spark 'default' 数据库而不是 hive 数据库中。

有人可以建议我为什么 bucketby(5,bucketted_column) 不能与 saveAsTable 一起使用。

    Note: Framework: HDP 3.0
    Spark : 2.1

【问题讨论】:

  • 如果我没记错的话,默认也是 Hive

标签: apache-spark apache-spark-sql hdp


【解决方案1】:

你可以尝试添加这个参数:

.option("dbtable", "schema.tablename")

【讨论】:

    【解决方案2】:

    df.write.mode...saveAsTable("database.table") 应该可以解决问题。

    除了bucketBy格式不能通过Hive、Hue、Impala读取。目前不支持。

    不确定您所说的 spark db 是什么意思,我想您是指 Spark Metastore?

    【讨论】:

    • 试过了,但在这种情况下显示找不到数据库。
    • 我假设的数据库名称。数据库当然必须存在,否则您的进程可以访问它。
    • 是的,数据库存在,我在 df 中选择数据时正在访问同一个数据库的表。即 val df=spark.sql("select * from mydb.mytable") 并在下一步中将此数据框保存在同一数据库中,我的目标表“hiveTable”也可用于同一数据库中。即具有相同结构的 mydb 我能够将分区数据也保存在表中,但每当我使用 bucketby 而不是采用“mydb”时,它采用 spark 数据库,即“默认”。@thebluephantom
    • 更新答案。
    猜你喜欢
    • 2017-12-11
    • 2020-03-31
    • 1970-01-01
    • 2016-11-26
    • 2021-07-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多