2016-12-07 20 views
0

データフレームに複数の列を連結しようとしています。私の列リストは変数にあります。私はその変数をconcat関数に渡そうとしていますが、それを行うことはできません。Scalaを使用してデータフレーム内の複数の列を連結する方法

例: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: _*) 

同様に、私は連結に使用したいもう1つのリストを持っています。しかし、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)) 

答えて

1

は、次のいずれかの

val base_tbl_columns: Array[String] = ??? 

df.select(concat(base_tbl_columns.map(c => col(c)): _*)) 

か:

df.select(expr(s"""concat(${base_tbl_columns.mkstring(",")})""")) 
+0

それは私のために働いています。最初のオプションを使いました。 hash_key_cols:配列[string] =配列(primary_state、zip_code) val hist_sk_df = hist_tbl_df.join(ブロードキャスト(hist_tbl_lkp_df)、Seq (ハッシュ_キー_コール)、コンカット(ハッシュ_キー_コールズ(c => col(c)):_ *)) – user3858193

+0

使用したい同様のvaribale結合もスカラー> primary_key_col res59:String = acct_nbr scala> delta_primary_key_col res60:String = delta_acct_n。私はこの2つの変数を私の結合キーで使いたいです...どうすればそれを行うことができますか? 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

関連する問題