当值与 pypark 中字符串的一部分匹配时,筛选 df

我有一个大的 pyspark.sql.dataframe.DataFrame,我想保留(因此 filter)所有行,其中保存在 location列中的 URL 包含一个预先确定的字符串,例如‘ google.com’。

我试过了:

import pyspark.sql.functions as sf
df.filter(sf.col('location').contains('google.com')).show(5)

但这会引发

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

我如何去周围和过滤我的 df 正确吗? 非常感谢提前!

190337 次浏览

火花2.2开始

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

Spark 2.2文档链接


火花2.1及以前

可以在 filter中使用 普通 SQL

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

使用 DataFrame 列方法

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

Spark 2.1文档链接

pyspark.sql.Column.contains() 只适用于 pypark 2.2及以上版本。

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

当使用字符串值过滤 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"))