使用Spark和Scala通过数据帧实现SQL逻辑
在配置单元表t1中有三列c1、c2、c3。我有MySQL代码来检查特定列是否为空。我有来自同一个表的数据帧。我想通过dataframe,df实现相同的逻辑,df有三列,c1,c2,c3 下面是SQL-使用Spark和Scala通过数据帧实现SQL逻辑,scala,apache-spark,Scala,Apache Spark,在配置单元表t1中有三列c1、c2、c3。我有MySQL代码来检查特定列是否为空。我有来自同一个表的数据帧。我想通过dataframe,df实现相同的逻辑,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 我在scala中起草了以下逻辑,使用when作为SQL的if的替代。我在写作或逻辑上遇到问题,请参见下文。如何使
if(
t1.c1=0 Or IsNull(t1.c1),
if(
IsNull(t1.c2/t1.c3),
1,
t1.c2/t1.c3
),
t1.c1
) AS myalias
我在scala中起草了以下逻辑,使用when作为SQL的if的替代。我在写作或逻辑上遇到问题,请参见下文。如何使用Scala通过Spark dataframe编写上述SQL逻辑
val df_withalias = df.withColumn("myalias",when(
Or((df("c1") == 0), isnull(df("c1"))),
when(
(isNull((df("c2") == 0)/df("c3")),
)
)
)
如何编写上述逻辑?首先,可以使用列的| |运算符构造逻辑OR条件。另外-请注意,当仅接受2个参数条件和值时,如果您想提供一个替代值以在条件不满足时使用,则需要使用。否则:
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"))
)