在pyspark中参数化连接条件

时间:2019-04-12 19:50:42

标签: apache-spark pyspark apache-spark-sql

我有一个列名列表,每次都不同。列名称存储在列表中。因此,我需要传递列表中的列名(在下面的示例中,其ID和ProgramID)以在源数据帧和目标数据帧之间进行比较。在下面的示例中,我要检查src_id == idsrc_programid == programid

from pyspark import SparkContext, SparkConf, SQLContext
from pyspark.sql.functions import col, when

srccolumns = ['src_id','src_programid']
tgtcolumns = ['id','programid']

joinSrcTgtAction =  joinSrcTgt.withColumn(
    'action', 
    when(
        (
            (col(src_id) == col(id)) & 
            (col(src_programid) == col(programid)) & 
            (joinSrcTgt.src_checksum != joinSrcTgt.checksum)
        ),
        'upsert'
    )
)

1 个答案:

答案 0 :(得分:0)

假设列表大小相同并保证列名的顺序,那么我们可以按索引匹配一对,您可以执行以下操作:

 var dbURI = "mongodb://localhost:27017/thenDBname"