我在Hive表t1中有三列(c1,c2,c3)。我有MySQL代码,检查特定列是否为空。我有来自同一个表的数据帧。我想通过dataframe实现相同的逻辑,df有三列,c1,c2,c3。
这是SQL -
if(
t1.c1=0 Or IsNull(t1.c1),
if(
IsNull(t1.c2/t1.c3),
1,
t1.c2/t1.c3
),
t1.c1
) AS myalias
我使用“when”作为SQL的“if”的替代,在scala中起草了以下逻辑。我正面临着编写“或”逻辑的问题(下面用粗体表示)。如何使用Scala通过Spark数据框编写上述SQL逻辑?
val df_withalias = df.withColumn("myalias",when(
Or((df("c1") == 0), isnull(df("c1"))),
when(
(isNull((df("c2") == 0)/df("c3")),
)
)
)
如何编写上述逻辑?
答案 0 :(得分:1)
首先,您可以使用Column
' ||
运算符来构造逻辑OR条件。另外 - 请注意when
只需要2个参数(条件和值),如果要提供替代值(如果条件不满足则使用) - 您需要使用{{1} }:
.otherwise