Spark sql 利用COALESCE()函数full join 两张DataFrame

47 篇文章 3 订阅
24 篇文章 0 订阅

我们经常使用spark时会对表合并

import spark.implicits._

import spark.implicits._

var data1 = Seq(  
 | ("1", "ming", "hlj"),  
 | ("2", "tian", "jl"),
 | ("3", "wang", "ln"),
 | ("4", "qi", "bj"),
 | ("5", "sun", "tj")
 | ).toDF("useid", "name", "live")  
 

var data2 = Seq(  
 | ("1", "1000", "sing"),  
 | ("3", "2000", "dance"),
 | ("5", "3000", "rap"),
 | ("7", "5000", "lanqiu"),
 | ("9", "8000", "zuqiu")
 | ).toDF("useid", "salary", "hobby")  
 
 
 data1.show()
data2.show()

在这里插入图片描述
在这里插入图片描述

将表data1和data2进行full join,生成新的useid

COALESCE()函数 参考链接

COALESCE ( expression,value1,value2……,valuen)
COALESCE()函数的第一个参数expression为待检测的表达式,而其后的参数个数不定。
COALESCE()函数将会返回包括expression在内的所有参数中的第一个非空表达式。
如果expression不为空值则返回expression;否则判断value1是否是空值,
如果value1不为空值则返回value1;否则判断value2是否是空值。

data1 = data1.withColumnRenamed(s"useid", s"useid_1")
data2 = data2.withColumnRenamed(s"useid", s"useid_2")

data1.createOrReplaceTempView(s"data1")
data2.createOrReplaceTempView(s"data2")



spark.sql(s"select" +
      s" COALESCE(aa.useid_1,bb.useid_2) as useid,*" +
      s" from data1 aa full join data2 bb on aa.useid_1=bb.useid_2"+
      s"").drop("useid_1").drop("useid_2").show()


在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值