使用Spark和Scala通过Dataframe实现SQL逻辑

时间:2017-09-13 15:30:49

标签: scala apache-spark

我在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")),
  )
)
)

如何编写上述逻辑?

1 个答案:

答案 0 :(得分:1)

首先,您可以使用Column' ||运算符来构造逻辑OR条件。另外 - 请注意when只需要2个参数(条件和值),如果要提供替代值(如果条件不满足则使用) - 您需要使用{{1} }:

.otherwise