Spark несколько условий присоединиться

Я использую spark sql для объединения трех таблиц, однако получаю сообщение об ошибке с несколькими условиями столбца.

test_table = (T1.join(T2,T1.dtm == T2.kids_dtm, "inner")
          .join(T3, T3.kids_dtm == T1.dtm
                and T2.room_id == T3.room_id
                and T2.book_id == T3.book_id, "inner"))

ОШИБКА:

  Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
  File "/opt/cloudera/parcels/CDH-5.7.0-1.cdh5.7.0.p0.45/lib/spark/python/pyspark/sql/column.py", line 447, in __nonzero__
    raise ValueError("Cannot convert column into bool: please use '&' for 'and', '|' for 'or', "
ValueError: Cannot convert column into bool: please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions.

Вместо указания «и» я попытался поставить «&» и «&&», но ничего из этого не работает. Любая помощь будет оценена по достоинству.


person vkb    schedule 25.05.2016    source источник


Ответы (1)


Nvm, следующие работы с использованием "&" и скобок:

test_table = (T1.join(T2,T1.dtm == T2.kids_dtm, "inner")
      .join(T3, (T3.kids_dtm == T1.dtm)
            & (T2.room_id == T3.room_id)
            & (T2.book_id == T3.book_id), "inner"))
person vkb    schedule 25.05.2016
comment
Или вы можете поместить свои условия в список; см. пример на stackoverflow.com/a/34463562/1843329. - person snark; 08.03.2019
comment
как насчет ИЛИ вместо этого? X или Y, как это будет работать в списке? - person AJR; 03.11.2020
comment
Или вы можете использовать список условий с именами переменных, как здесь stackoverflow.com/a/45813075/38368, что полезно если имена столбцов вычисляются, например. по индексу в цикле. - person Danny Varod; 25.03.2021