Ошибка типа: неподдерживаемые типы операндов для &: 'str' и 'method'

Я конвертирую Hive SQL, используя операции API-интерфейса spark dataframe. Один из вариантов использования требует проверки строкового столбца на пустое и 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 ответ

Решение

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

Я бы порекомендовал вытащить сложные выражения столбца в переменные, чтобы очистить это.

Другие вопросы по тегам