gpt4 book ai didi

scala - 基于非空值加入 Spark 数据帧(scala)

转载 作者:行者123 更新时间:2023-12-04 03:10:25 26 4
gpt4 key购买 nike

假设我有两个数据框,如下所示:

第一的 -

A    | B    | C    | D
1a | 1b | 1c | 1d
2a | null | 2c | 2d
3a | null | null | 3d
4a | 4b | null | null
5a | null | null | null
6a | 6b | 6c | null

第二 -
P    | B    | C    | D
1p | 1b | 1c | 1d
2p | 2b | 2c | 2d
3p | 3b | 3c | 3d
4p | 4b | 4c | 4d
5p | 5b | 5c | 5d
6p | 6b | 6c | 6d

join操作是基于{"B", "C", "D"}进行的。如果这些列中的任何一个出现空值,它应该检查剩余列中是否出现非空值。

所以,结果应该是——
P    | B    | C    | D    | A
1p | 1b | 1c | 1d | 1a
2p | null | 2c | 2d | 2a
3p | null | null | 3d | 3a
4p | 4b | null | null | 4a // First(C) & First(D) was null so we take only B
6p | 6b | 6c | null | 6a

任何人都可以为此查询提出任何解决方案吗?
目前我正在尝试过滤单列、两列、三列中具有空值的值。然后加入他们与 Second 不采取该列。例如——
我首先从 First 中过滤掉了只有 B 为空的值。然后将其与基于“C”和“D”的 Second 结合起来。
通过这种方式,我将获得许多数据帧,并最终将它们联合起来。

最佳答案

这是你可以做的

import org.apache.spark.sql.functions._
df1.join(broadcast(df2), df1("B") === df2("B") || df1("C") === df2("C") || df1("D") === df2("D"))
.drop(df2("B"))
.drop(df2("C"))
.drop(df2("D"))
.show(false)

为了更安全,您可以 broadcast dataframe尺寸较小。

关于scala - 基于非空值加入 Spark 数据帧(scala),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45815703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com