Spark SQL中Dataframe join操作含null值的列

Spark SQL中Dataframe join操作含null值的列

当在Spark SQL中对两个Dataframe使用join时,当作为连接的字段的值含有null值。由于null表示的含义是未知,既不知道有没有,在SQL中null值与任何其他值的比较(即使是null)永远不会为真。故在进行连接操作时null == null不为True,所以结果中不会出现该条记录,即左侧表格的这条记录对应右侧的值均为null。示例如下:

table_a:

dateserverIdlvSection
2018-03-04110
2018-03-05null9
2018-03-07515

table_b:

dateserverIdnum
2018-03-04113
2018-03-05null4
2018-03-0756
Dataset<Row> table_c = table_a.join(table_b,ScalaUtils.getScalaSeq(Lists.newArrayList("date","serverId")),"left")

table_c:

dateserverIdlvSectionnum
2018-03-0411013
2018-03-05null9null
2018-03-075156

所以在使用join时应注意作为连接的字段出现null值的情况。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark DataFrameJoin操作可以根据不同的策略进行选择。根据引用,在没有合适的Join机制可供选择时,最终会选择Broadcast Nested Loop Join。Broadcast Nested Loop Join的优先级较低,只有当其他Join策略不可行时才会选择这个策略。而根据引用,在没有Join提示的情况下,Spark会按照一定的顺序选择Join策略,优先选择Broadcast hash join,其次是Shuffle hash join,然后是Sort merge join,最后是Cartesian join和Broadcast nested loop join。其,Broadcast hash join会在某个表可以被广播时使用,Shuffle hash join会在参数spark.sql.join.preferSortMergeJoin设定为false且一张表足够小的情况下使用,Sort merge join会在key是排序的情况下使用,Cartesian join会在内连接时使用,Broadcast nested loop join会在可能会发生OOM(内存耗尽)或者没有其他可选择的策略时使用。至于具体使用哪种Join策略,还需要根据具体的应用场景和数据特点来决定。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [SparkSQLJoin的实现方式](https://blog.csdn.net/junkmachine/article/details/126898499)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [【极简spark教程】DataFrame常用操作](https://blog.csdn.net/ljp7759325/article/details/124135234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值