Я пытаюсь выполнить несколько столбцов в фрейме данных. Мой список столбцов присутствует в переменной. Я пытаюсь передать эту переменную в функцию concat, но не могу этого сделать.Как конкатрировать несколько столбцов в кадре данных с помощью Scala
Ex: base_tbl_columns содержит список столбцов, и я использую код ниже, чтобы выбрать все столбцы, упомянутые в varibale.
scala> val base_tbl_columns = scd_table_keys_df.first().getString(5).split(",")
base_tbl_columns: Array[String] = Array(acct_nbr, account_sk_id, zip_code, primary_state, eff_start_date, eff_end_date, load_tm, hash_key, eff_flag)
val hist_sk_df_ld = hist_sk_df.select(base_tbl_columns.head,base_tbl_columns.tail: _*)
Аналогичным образом, у меня есть еще один список, который я хочу использовать для конкатенации. Но там функция concat не принимает аргументы .head и .tail.
scala> val hash_key_cols = scd_table_keys_df.first().getString(4)
hash_key_cols: String = primary_state,zip_code
Here I am hard coding the value primary_state and zip_code.
.withColumn("hash_key_col",concat($"primary_state",$"zip_code"))
Here I am passing the variable hash_key_cols .
.withColumn("hash_key_col",concat(hash_key_cols))
Я был в состоянии сделать это в python, используя приведенный ниже код.
hist_sk_df = hist_tbl_df.join(broadcast(hist_tbl_lkp_df) ,primary_key_col,'inner').withColumn("eff_start_date",lit(load_dt))**.withColumn('hash_key_col',F.concat(*hash_key_cols))**.withColumn("hash_key",hash_udf('hash_key_col')).withColumn("eff_end_date",lit(eff_close_dt)).withColumn("load_tm",lit(load_tm)).withColumn("eff_flag",lit(eff_flag_curr))
Он работал для меня. Я использовал первый вариант. scala> val hash_key_cols = scd_table_keys_df.first(). getString (4) .split (",") hash_key_cols: Array [String] = Array (primary_state, zip_code) val hist_sk_df = hist_tbl_df.join (broadcast (hist_tbl_lkp_df), Seq (primary_key_col), «internal») .withColumn («eff_start_date», lit (load_dt)) .Column («hash_key_col», concat (hash_key_cols.map (c => col (c)): _ *)) – user3858193
Хотите использовать подобный varibale в join также scala> primary_key_col res59: String = acct_nbr scala> delta_primary_key_col res60: String = delta_acct_n. Я хочу использовать эту две переменные в моей клавише join ... Как это можно сделать. val cdc_new_acct_df = delta_src_rename_df.join (hist_tgt_tbl_Y_df, (delta_src_rename_df ($ delta_primary_key_col) == hist_tgt_tbl_Y_df ($ primary_key_col), "left_outer")) – user3858193