【问题标题】:Pyspark - Passing inequality condition dynamically to dataframes joinPyspark - 将不等式条件动态传递给数据框连接
【发布时间】:2021-02-18 22:43:38
【问题描述】:

我正在使用另一个问题的代码:我的问题是,除了 ON 子句之外,我如何在此处为连接传递不等式条件。

例如我的加入条件是("ID == ID") & ((DATE1 < DATE2) & (DATE3 > DATE4)) 如果我的条件只有ID == ID,我可以使用list_of_join_columns = ['ID'] 来做到这一点,但我也想在下面的代码中传递不等式条件:请告知如何实现。

***现有代码*****

def join_dataframes(list_of_join_columns, left_df, right_df):
    return left_df.join(right_df, on=list_of_join_columns)

joined_df = functools.reduce(
    functools.partial(join_dataframes, list_of_join_columns), list_of_dataframes,
)

【问题讨论】:

    标签: dataframe join dynamic pyspark inequality


    【解决方案1】:

    您需要在连接条件中将数据框名称与列一起标记,以防列名称在两个数据框中都不同

    另外,建议重命名正确的数据框公共列,例如 id ,

    right_df = right_df.withColumnRenamed("ID", "right_ID")

    new_df = left_df.join(right_df, (left_df.ID == right_df.right_ID) & ((left_df.DATE1 < right_df.DATE2) & (left_df.DATE3 > right_df.DATE4))

    【讨论】:

    • 我希望能够将连接条件作为参数传递,就像在这里传递“list_of_join_columns”一样。因为我想传递连接列以及其他条件表达式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2018-05-28
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    相关资源
    最近更新 更多