如何使用Scala在Spark数据帧中作为变量传递连接键

如何使用Scala在Spark数据帧中作为变量传递连接键,scala,apache-spark,apache-spark-sql,spark-dataframe,Scala,Apache Spark,Apache Spark Sql,Spark Dataframe,我试图在两个变量中kep两个数据帧的join键。我想传递到一个join。这里我的变量包含一个键。我还能传递多把钥匙吗 例: 第一键: scala>val primary\u key\u col=scd\u table\u keys\u df.first.getString2 主键列:字符串=acct\U nbr 第二个关键点: scala>val delta_primary_key_col=delta_+primary_key_col 增量主键列:字符串=增量帐户编号 ** My python

我试图在两个变量中kep两个数据帧的join键。我想传递到一个join。这里我的变量包含一个键。我还能传递多把钥匙吗

例: 第一键: scala>val primary\u key\u col=scd\u table\u keys\u df.first.getString2 主键列:字符串=acct\U nbr

第二个关键点: scala>val delta_primary_key_col=delta_+primary_key_col 增量主键列:字符串=增量帐户编号

** My python Code which is working
cdc_new_acct_df = delta_src_rename_df.join(hist_tgt_tbl_Y_df ,(col(delta_primary_key_col) == col(primary_key_col)) ,'left_outer' ).where(hist_tgt_tbl_Y_df[primary_key_col].isNull())
我想在Scala实现同样的目标。请建议。 尝试多种方法

val cdc_new_acct_df = delta_src_rename_df.join(hist_tgt_tbl_Y_df ,(delta_src_rename_df({primary_key_col.mkstring(",")}) == hist_tgt_tbl_Y_df({primary_key_col.mkstring(",")}),"left_outer" )).where(hist_tgt_tbl_Y_df[primary_key_col].isNull())
:121:错误:值mkstring不是字符串的成员

val cdc_new_acct_df = delta_src_rename_df.join(hist_tgt_tbl_Y_df ,(delta_src_rename_df(delta_primary_key_col.map(c => col(c))) == hist_tgt_tbl_Y_df(primary_key_col.map(c => col(c))),"left_outer" ))
:123:错误:类型不匹配; 找到:数组[org.apache.spark.sql.Column] 必需:字符串


无法解决。请建议。

我缺少变量替换。这对我有用

scala> val cdc_new_acct_df = delta_src_rename_df.join(hist_tgt_tbl_Y_df ,delta_src_rename_df(**s"$delta_primary_key_col"**) === hist_tgt_tbl_Y_df(s"$primary_key_col"),"left_outer" )
    cdc_new_acct_df: org.apache.spark.sql.DataFrame = [delta_acct_nbr: string, delta_primary_state: string, delta_zip_code: string, delta_load_tm: string, delta_load_date: string, hash_key_col: string, delta_hash_key: int, delta_eff_start_date: string, acct_nbr: string, account_sk_id: bigint, primary_state: string, zip_code: string, eff_start_date: string, eff_end_date: string, load_tm: string, hash_key: string, eff_flag: string]