web-dev-qa-db-fra.com

Filtrez df lorsque les valeurs correspondent à une partie de chaîne dans pyspark

J'ai un grand pyspark.sql.dataframe.DataFrame Et je veux conserver (donc filter) toutes les lignes où l'URL enregistrée dans la colonne location contient une chaîne prédéterminée, par exemple. "google.com".

J'ai essayé df.filter(sf.col('location').contains('google.com') mais cela jette un

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

Comment puis-je filtrer correctement mon DF? Merci d'avance!

27
gaatjeniksaan

Vous pouvez utiliser SQL pur dans filter

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

ou avec les méthodes de colonne DataFrame

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

pyspark.sql.Column.contains() est uniquement disponible dans les versions 2.2 et supérieures de pyspark.

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

Lors du filtrage d'un DataFrame avec des valeurs de chaîne, je constate que le pyspark.sql.functionslower et upper sont pratiques, si vos données peuvent avoir des entrées de colonne comme "foo" et "Foo":

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