【问题标题】:Check if a value is between two columns, spark scala检查一个值是否在两列之间,火花scala
【发布时间】:2021-03-15 22:35:02
【问题描述】:

我有两个数据框,一个包含我的数据,另一个用于比较。我想要做的是检查一个值是否在两个不同列的范围内,例如:

Df_player
    +--------+-------+
    | Baller | Power |
    +--------+-------+
    | John   |   1.5 |
    | Bilbo  |   3.7 |
    | Frodo  |   6   |
    +--------+-------+

Df_Check
    +--------+--------+--------+
    | First  | Second | Value  |
    +--------+--------+--------+
    |   1    |   1.5  |  Bad-  |
    |   1.5  |   3    |  Bad   |
    |   3    |   4.2  |  Good  |
    |   4.2  |   6    |  Good+ |
    +--------+--------+--------+

结果是:

Df_out
    +--------+-------+--------+
    | Baller | Power | Value  |
    +--------+-------+--------+
    | John   |   1.5 |  Bad-  |
    | Bilbo  |   3.7 |  Good  |
    | Frodo  |   6   |  Good+ |
    +--------+-------+--------+

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    您可以基于 between 条件进行连接,但请注意 .between 在这里不合适,因为您希望其中一个比较不相等:

    val result = df_player.join(
        df_check, 
        df_player("Power") > df_check("First") && df_player("Power") <= df_check("Second"), 
        "left"
    ).select("Baller", "Power", "Value")
    
    result.show
    +------+-----+-----+
    |Baller|Power|Value|
    +------+-----+-----+
    |  John|  1.5| Bad-|
    | Bilbo|  3.7| Good|
    | Frodo|  6.0|Good+|
    +------+-----+-----+
    

    【讨论】:

    • 非常感谢 :) !如果我想在 DF 中选择 Baller 和 Power(现在包含 Value 列)将 Value 放在 Power 列中?
    • 可以将选择行替换为.select(col("Baller"), col("Value").as("Power"))
    • 但这告诉我“final_value”列没有退出。这是因为不在DF_player中吧?
    • 对不起,我想说“价值”
    • 它应该可以工作,因为列值在被连接的 df_check 中。您会看到,在我的回答中,“值”已成功选择。我认为您的代码中可能存在其他一些问题。如果您可以通过编辑问题来显示您的代码,将会很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 2022-03-30
    • 2022-01-20
    • 2019-10-06
    相关资源
    最近更新 更多