gpt4 book ai didi

dataframe - Pyspark - 在右侧数据集中加入空值

转载 作者:行者123 更新时间:2023-12-05 03:30:15 25 4
gpt4 key购买 nike

假设我有一个包含以下内容的数据集:

# dataset_left
#+-----------------+--------------+---------------+
#| A | B | C |
#+-----------------+--------------+---------------+
#| some_value_1 | some_value_3 | some_value_5 |
#+-----------------+--------------+---------------+
#| some_value_2 | some_value_4 | some_value_6 |
#+-----------------+--------------+---------------+

我还有另一个数据集,如下所示:

# dataset_rules
#+-----------------+--------------+---------------+
#| A | B | result_col |
#+-----------------+--------------+---------------+
#| null | some_value_3 | result_1 |
#+-----------------+--------------+---------------+
#| some_value_2 | null | result_2 |
#+-----------------+--------------+---------------+

我的目标是使用此规则连接两个数据集:

对于 dataset_rules :A 列和 B 列中的空值可以匹配 dataset_left 中的任何值.连接应该只考虑来自 dataset_rules 的非空值。

因此对于 dataset_rule 中的第一行,只有 B 列应该用作条件。对于第 2 行,只有列 A 应该用作条件。

我想达到以下预期结果:

# dataset_result
#+-----------------+--------------+---------------+------------+
#| A | B | C | result_col |
#+-----------------+--------------+---------------+------------+
#| some_value_1 | some_value_3 | some_value_5 | result_1 |
#+-----------------+--------------+---------------+------------+
#| some_value_2 | some_value_4 | some_value_6 | result_2 |
#+-----------------+--------------+---------------+------------+

目标是避免在 dataset_rules 中对规则进行硬编码,以便于添加新规则并更易于维护。

最佳答案

您可以像这样使用 whencoalesce 表达式加入:

from pyspark.sql import functions as F

join_cond = (
(F.coalesce(dataset_rules["A"], dataset_left["A"]) == dataset_left["A"])
& (F.coalesce(dataset_rules["B"], dataset_left["B"]) == dataset_left["B"])
)

result = dataset_left.join(dataset_rules, join_cond, "left").select(
dataset_left["*"],
dataset_rules["result_col"]
)

result.show()
#+------------+------------+------------+----------+
#| A| B| C|result_col|
#+------------+------------+------------+----------+
#|some_value_1|some_value_3|some_value_5| result_1|
#|some_value_2|some_value_4|some_value_6| result_2|
#+------------+------------+------------+----------+

关于dataframe - Pyspark - 在右侧数据集中加入空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70890880/

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