【问题标题】:Update Table Hive Using Spark Scala使用 Spark Scala 更新表 Hive
【发布时间】:2017-08-29 16:20:16
【问题描述】:

我需要update 像这样的 Table Hive

update A from B
    set 
        Col5 = A.Col2, 
        Col2 =   B.Col2, 
        DT_Change = B.DT, 
        Col3 = B.Col3, 
        Col4 = B.Col4
where A.Col1 = B.Col1  and  A.Col2 <> B.Col2

使用 Scala Spark RDD

我该怎么做?

【问题讨论】:

标签: scala apache-spark rdd


【解决方案1】:

我想把这个问题分成两个问题来简单解释一下。 第一个问题:如何将 Spark RDD 数据写入 Hive 表? 最简单的方法是使用方法rdd.toDF() 将RDD 转换为Spark SQL(数据帧)。然后使用df.registerTempTable("temp_table") 将数据帧注册为临时表。现在您可以使用 sqlContext.sql("insert into table my_table select * from temp_table") 从 temptable 查询并插入到 hive 表中。 第二个问题:如何从 Spark 更新 Hive 表? 截至目前,Hive 并不是最适合记录级别更新的。只能对支持 ACID 的表执行更新。一个主要限制是只有 ORC 格式支持更新 Hive 表。你可以从https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions找到一些关于它的信息 这个可以参考How to Updata an ORC Hive table form Spark using Scala

spark 2.x 可能已弃用了一些方法,您可以查看 spark 2.0 文档以获取最新方法。 虽然可能有更好的方法,但这是我能想到的最简单的方法。

【讨论】:

  • 我的问题是如何在 2 个不同的 rdd 中加载 2 个表并在其中一个 rdd 上进行更新,然后将结果保存在 hive 表中
  • @W.R 由于表中的数据已经结构化,因此使用数据框代替 rdds 是正确的方法。在这种情况下,将表 1 中的数据加载到数据框 1,将表 2 加载到数据框 2。现在您可以对这些数据框执行转换或连接。例如 df1.join( df2, col("df1.col1") === col("df2.col1"), "left_outer")
猜你喜欢
  • 2016-04-04
  • 2018-02-02
  • 1970-01-01
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 2017-05-12
  • 2021-12-09
  • 1970-01-01
相关资源
最近更新 更多