我正在使用spark dataframe api操作转换配置单元sql。一种用例需要验证字符串列的空白和NULL。
我写了下面的代码以满足要求
when(trim(get_sor_tab_df["X"]) == 'D',
when((trim(get_sor_tab_df["X1"]) != '' & get_sor_tab_df["X1"].isNotNull), trim(get_sor_tab_df["X2"])))
.when(df2_lkp["r_code8"].isNotNull,df2_lkp["r_code8"]).otherwise(coalesce(trim(get_sor_tab_df["X3"]), lit("")))
(trim(get_sor_tab_df["X1"]) != '' & get_sor_tab_df["X1"].isNotNull)
这张支票给我错误。我如何满足这个条件?
答案 0 :(得分:0)
isNotNull
是一个函数;您忘记了()
。
您还需要在每个条件周围加上括号,因为&
的运算符优先级高于==
/ !=
。
我相信这在逻辑上与您所拥有的是等价的,并且有意地设置了奇怪的格式以确保parens是平衡的并且逻辑分组在那里:
when( ( (trim(get_sor_tab_df["X"]) == 'D')
& ( (trim(get_sor_tab_df["X1"]) != '')
& (get_sor_tab_df["X1"].isNotNull())
)
),
trim(get_sor_tab_df["X2"])
)
.when(df2_lkp["r_code8"].isNotNull(), df2_lkp["r_code8"])
.otherwise(coalesce(trim(get_sor_tab_df["X3"]), lit("")))
我建议将复杂的列表达式提取为变量以进行清理。