2017-09-13 4 views
0

Hiveテーブルt1に3つの列(c1、c2、c3)があります。特定の列がnullかどうかをチェックするMySQLコードがあります。私は同じテーブルからデータフレームを持っています。私は3つの列、c1、c2、c3を持つデータフレーム、dfを介して同じロジックを実装したいと思います。SparkとScalaを使用してデータフレーム経由でSQLロジックを実装

は、ここで私が使用してスカラ座で次のロジックを起草したSQL-

if(
t1.c1=0 Or IsNull(t1.c1), 
if(
IsNull(t1.c2/t1.c3), 
1, 
t1.c2/t1.c3 
), 
t1.c1 
) AS myalias 

ある「とき」に「もし」SQLの代替として。私は問題の "または"論理(下に太字)を書いている。 Scalaを使用してSparkデータフレーム経由で上記のSQLロジックを書くにはどうすればいいですか?

val df_withalias = df.withColumn("myalias",when(
    Or((df("c1") == 0), isnull(df("c1"))), 
    when(
    (isNull((df("c2") == 0)/df("c3")), 
) 
) 
) 

上記のロジックをどのように書くことができますか?

答えて

1

まず、Column||演算子を使用して論理OR条件を構成できます。また、 - whenはわずか2引数(条件と値)を取り、そしてあなたが代替値を指定したい場合(条件が満たされない場合に使用される)ことに注意してください - あなたが使用する必要が.otherwise

val df_withalias = df.withColumn("myalias", 
    when(df("c1") === 0 || isnull(df("c1")), 
    when(isnull(df("c2")/df("c3")), 1).otherwise(df("c2")/df("c3")) 
).otherwise(df("c1")) 
) 
+0

働いていました!ありがとうTzach。 –

関連する問題