TypeError:&不支持的操作数类型:“ str”和“方法”

时间:2019-08-30 21:28:44

标签: python pyspark pyspark-dataframes

我正在使用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)

这张支票给我错误。我如何满足这个条件?

1 个答案:

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

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