2016-06-18 18 views
2

私はspark(scala)を学習しており、派生カラムを持つデータフレームを作成しています。私はベストプラクティスを理解しようとしています。spark dataframe計算カラム

私のユースケースは、値を別の列を探して2つの導出列がある - 私はUDF関数を書かれている - 他のユースケースが

if(col23 = "us" && col100 = "abc") then col2 = "10" else if (col23 = "us" && col100 = "bacd" && col99 is null then col2 = 11 else null) 

質問です

if (col22 = "USD") then col1 = "US" elseif (col22 = "CDN" the col1 = "CA" else null) 

- 例えば を上記の計算。私はこれを行うより良い方法があるのだろうか? udf関数を書くのがベストプラクティスです。私は自分のコードでこれらの関数を1回だけ使用します。

マイScalaのコード -

def udf1 = udf((col22: String){ (col22) match { 
    case col22 if (col22 == "USD") => "US" 
    case col22 if (col22 == "CDN") => "CA" 
    case _ => null } }) 

val df1= df.select($"col1", $"col2", udf1($"col22").as("newcol"), udf2($"col23", $"col100").as(newcol2)) 

答えて

3

あなたが好きな何かを行うことができます:

val df1 = df.withColumn(
    "newcol", 
    when($"col22" === "USD", lit("US")).otherwise(
    when($"col22" === "CDN", lit("CA")).otherwise(lit(null)) 
) 
) 
+0

がそれ(あなたの例では)インラインコードを使用することがベストプラクティスであるか、我々はUDFを使用する必要がありますか? – user1122

+0

必要な場合を除き、UDFは使用しないでください。他のコードと同様にSQL式を作成できます。 – zero323