筛选前两个字符为大写的列值

Filter on column values of which first two characters are uppercase

我正在尝试使用 Pyspark 过滤 table,其中一列的所有值的所有前两个字符均以两个大写字母开头,例如 'UTrecht'、'NEw York', 等等

这是我尝试过的方法,但完全失败了:

df_filtered=df.filter(F.col("column_name").isUpper())

我也试过:

df_filtered=df.filter(str.isupper,"affiliation_city")

导致以下错误:

filter() takes 2 positional arguments but 3 were given

我是 Pyspark 的新手,所以任何建议都将不胜感激。

提前致谢!

您可以使用 substr 函数和 upper 函数查看 substr 是否为 upper,如下所示

您将前两个字母与 substr 进行比较,如果此子字符串与 upper(F.col("test").substr(1, 2)) 进行比较,则将它们过滤为

df.filter(
   F.col("test").substr(1, 2) == F.upper(F.col("test").substr(1, 2))
).show()

如果你想要更多的灵活性,(但这不是我的最佳方式)你可以有一个 returns True/False 和 python isupper() 函数

from pyspark.sql.functions import udf
from pyspark.sql.types import BooleanType


upp  = udf(lambda x: x[0:2].isupper() if x!= None else False,BooleanType())

df.filter(upp('affiliation_city')).show()