2017-08-29 58 views
-1

我需要一个update表蜂巢状更新表蜂巢使用星火斯卡拉

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的星火RDD

我怎样才能做到这一点?

+0

欢迎来到Stack Overflow!请阅读关于提出一个好问题的提示:https://stackoverflow.com/help/how-to-ask – TrevorBrooks

回答

0

我想将这个问题分为两个问题来解释它简单。 第一个问题:如何将Spark RDD数据写入Hive表? 最简单的方法是使用方法rdd.toDF()将RDD转换为Spark SQL(数据框)。然后使用df.registerTempTable("temp_table")将数据帧注册为临时表。现在您可以从temptable查询并使用sqlContext.sql("insert into table my_table select * from temp_table")插入到配置单元表中。 第二个问题:如何从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文档。 虽然可以有更好的方法,但这是我能想到的最简单的方法。

+0

我的问题是如何在2个不同的rdd中加载2个表,然后在其中一个rdd上进行更新将结果保存在配置单元表 –

+0

@WR由于表中的数据已经结构化,所以使用数据框代替rdds是正确的方法。在这种情况下,将表1中的数据加载到dataframe1中,将表2中的数据加载到dataframe2中。现在可以对这些数据帧执行转换或连接。 例如,df1.join( df2,col(“df1.col1”)=== col(“df2.col1”),“left_outer”) – Satya