当值匹配pyspark中字符串的一部分时,过滤df

gaa*_*aan 32 python apache-spark apache-spark-sql 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'
Run Code Online (Sandbox Code Playgroud)

我该如何绕过并正确过滤我的df?提前谢谢了!

mrs*_*vas 61

您可以使用普通的SQLfilter

df.filter(df.location.contains('%google.com%'))
Run Code Online (Sandbox Code Playgroud)

使用DataFrame列方法

df.filter("location like '%google.com%'")
Run Code Online (Sandbox Code Playgroud)

  • @cph_bon:有很多方法可以做到。**SQL** `df.filter("location like '%google.com%' AND location like '%amazon.com%'")` 或 **DataFrame** `df.filter("location like '%google .com%'").filter("location like '%amazon.com%'")` (2认同)

Joa*_*ins 13

我必须和你做同样的工作并且pyspark.sql.Column.contains()工作:

df.where(df.location.contains('google.com'))
Run Code Online (Sandbox Code Playgroud)

也许他们已经纠正过了.


caf*_*eyd 7

当使用字符串值过滤 DataFrame 时,我发现pyspark.sql.functions lowerupper派上用场,如果您的数据可以有像“foo”和“Foo”这样的列条目:

import pyspark.sql.functions as sql_fun
result = source_df.filter(sql_fun.lower(source_df.col_name).contains("foo"))
Run Code Online (Sandbox Code Playgroud)