2017-09-13 41 views
0

我在Hive表t1中有三列(c1,c2,c3)。我有MySQL代碼檢查特定列是否爲空。我有來自同一張表的數據幀。我想通過dataframe實現相同的邏輯,df有三列,c1,c2,c3。使用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。 –