web-dev-qa-db-ger.com

Filtern Sie df, wenn Werte mit einem Teil einer Zeichenfolge in Pyspark übereinstimmen

Ich habe einen großen pyspark.sql.dataframe.DataFrame Und möchte (also filter) alle Zeilen behalten, in denen die in der Spalte location gespeicherte URL eine vorgegebene Zeichenfolge enthält, z. "google.com".

Ich habe df.filter(sf.col('location').contains('google.com') ausprobiert, aber das wirft a

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

Wie gehe ich herum und filtere meinen df richtig? Vielen Dank im Voraus!

27
gaatjeniksaan

Sie können einfaches SQL in filter verwenden.

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

oder mit DataFrame-Spaltenmethoden

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

pyspark.sql.Column.contains() ist nur in Pyspark Version 2.2 und höher verfügbar.

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

Beim Filtern eines DataFrames mit Zeichenfolgenwerten stelle ich fest, dass pyspark.sql.functionslower und upper sind nützlich, wenn Ihre Daten Spalteneinträge wie "foo" und "Foo" enthalten könnten:

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