Фильтр df, когда значения соответствуют части строки в pyspark

У меня большой pyspark.sql.dataframe.DataFrame, и я хочу сохранить (так filter) все строки, где URL-адрес, сохраненный в столбце location, содержит предварительно определенную строку, например. 'Google.com'.

Я пробовал df.filter(sf.col('location').contains('google.com') но это бросает

TypeError: _TypeError: 'Column' object is not callable'

Как обойти и правильно фильтровать мой df? Спасибо заранее!

Ответ 1

Spark 2.2 onwords

df.filter(df.contains.like('%google.com%'))

Spark 2.2 documentation link


Spark 2.1 и раньше

You can use plain SQL in filter

df.filter("location like '%google.com%'")

or with DataFrame column methods

df.filter(df.location.like('%google.com%'))

Spark 2.1 documentation link

Ответ 2

pyspark.sql.Column.contains() доступно только в pyspark версии 2.2 и выше.

df.where(df.location.contains('google.com'))

Ответ 3

При фильтрации DataFrame со строковыми значениями я обнаружил, что pyspark.sql.functions lower и upper пригодятся, если ваши данные могут иметь записи в столбцах, такие как "foo" и "Foo":

import pyspark.sql.functions as sql_fun
result = source_df.filter(sql_fun.lower(source_df.col_name).contains("foo"))