Jak poprawnie filtrować dataframe?

0

Cześć.

Od niedawna uczę się Sparka. Słabo odnajduję się w Pythonie.

Wiem że df.where() przyjmuje składnie z SQL'a i natywną.

Taki kod mi działa:

df = df.select('Index', 'First Name', 'Last Name').where("Index > 95 AND Index < 99")

Taki również:

df = df.select('Index', 'First Name', 'Last Name').where((df["Index"] > 95) & (df["Index"] < 99))

Dziwi mnie to że gdy używam && mam błąd i gdy pomijam nawiasy też mam błąd.
Z tej strony czytam że używanie && jest poprawne: https://sparkbyexamples.com/spark/spark-dataframe-where-to-filter-rows/

Czuję że mam fundamentalne braki.
Dla czego używanie && lub brak () powoduje błąd?

1

Ta stronka nie jest czasem odnośnie Scali?

2

W funkcjach typu where czy filter powinieneś odwoływać się do konkretnego obiektu kolumny przy pomocy funkcji pyspark.sql.functions.col. Odwołujesz się wtedy do konkretnej kolumny. Różnica między bezpośrednim wywołaniem z df to inne calle pod spodem. Już tak nie pamiętam szczegółów. Generalnie jest to dobra praktyka w przypadku chainingu, czyli tworzenia kolejnych elementów łańcucha danych w df.

df = (df
  .select('Index', 'First Name', 'Last Name')
  .where(
    (col("index") > 95) &
    (col("Index") < 99))
  )

Anyway powyższe można zrobić bez &:

  .where(
    (95 < col("index") < 99)
  )
0

Pierwsze działa, ale drugie:

  .where(
    (95 < col("index") < 99)
  )

Powoduje błąd:
ValueError: Cannot convert column into bool: please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions.

1 użytkowników online, w tym zalogowanych: 0, gości: 1