-1

我正在使用 spark dataframe api 操作转换 hive 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)

这个检查给了我错误。我怎样才能满足这个条件?

4

1 回答 1

0

isNotNull是一个函数;你忘了().

您还需要在每个条件周围加上括号,因为&运算符的优先级高于==/ !=

我相信这在逻辑上等同于你所拥有的,故意使用奇怪的格式来确保括号是平衡的并且逻辑分组在那里:

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("")))

我建议将复杂的列表达式提取到变量中以进行清理。

于 2019-08-30T21:58:52.420 回答