【问题标题】:How to Updata an ORC Hive table form Spark using Scala如何使用 Scala 从 Spark 更新 ORC Hive 表
【发布时间】:2016-04-04 17:28:39
【问题描述】:

我想更新一个 orc 格式的配置单元表,我可以从我的 ambari 配置单元视图更新,但无法从 sacla (spark-shell) 运行相同的更新语句

objHiveContext.sql("select * from table_name ") 能够看到数据但是当我运行时

objHiveContext.sql("update table_name set column_name='testing' ") 无法运行,一些 Noviable 异常(更新附近的语法无效等)正在发生,因为我能够从 Ambari 视图更新(因为我设置了所有所需的配置,即 TBLPROPERTIES "orc.compress"="NONE" transactional true 等)

尝试将 Insert 插入到使用 case 语句中,但都失败了 我们可以从 spark 更新 hive ORC 表吗? 如果是,那么程序是什么?

下面导入

import org.apache.spark.SparkConf
import org.apache.spark.SparkConf
import org.apache.spark._
import org.apache.spark.sql._
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.sql.hive.orc._

注意:我没有在该表上应用任何分区或分桶 如果我应用分桶,我什至无法在存储为 ORC 时查看数据 蜂巢版本:1.2.1 火花版本:1.4.1 斯卡拉版本:2.10.6

【问题讨论】:

    标签: scala apache-spark apache-spark-sql hiveql hivecontext


    【解决方案1】:

    您是否按照以下链接使用 SaveMode.Append 尝试过 DataFrame.write API?

    http://spark.apache.org/docs/latest/sql-programming-guide.html#manually-specifying-options

    使用“orc”作为格式,使用“append”作为保存模式。示例在上面的链接中。

    【讨论】:

    • 成功了!所以我们不能直接更新配置单元表。我的意思是,如果我有一个大约十万条记录的表,那么我需要加载整个表,然后更新并存储在一个新的数据帧中,然后覆盖该表(SaveMode.Overwrite),因为追加将追加到现有的而不是修改......,是有什么选择吗?一件事我以ORC格式保存了一个表,它保存在默认数据库中,保存时如何提及数据库名称?我用这个命令来保存 myData.write.format("orc").mode(SaveMode.Append).saveAsTable("yahoo_orc_table")
    【解决方案2】:

    苏迪尔问题的答案:-

    如何在保存时提及数据库名称?

    您可以在表名之前提供数据库名。 例如:- 如果您的数据库名称是 orc_db 并且表名称是 yahoo_orc_table 那么您可以在表名之前提及数据库名称,如下所示:-myData.write.format("orc").mode(SaveMode.Append).saveAsTable("orc_db.yahoo_orc_table")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-11
      • 1970-01-01
      • 2021-05-22
      • 2018-02-02
      • 2017-09-15
      • 2018-04-10
      • 2023-04-07
      • 2018-06-09
      相关资源
      最近更新 更多