首页 > 解决方案 > 过滤前两个字符为大写的列值

问题描述

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

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

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

我也试过:

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

这导致了以下错误:

filter() 接受 2 个位置参数,但给出了 3 个

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

提前致谢!

标签: pythonapache-sparkpysparkfilteringuppercase

解决方案


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

如果此子字符串带有,则将前两个字母与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()

如果你想要更多的灵活性,(但它不是 i 的最佳方式)你可以有一个使用 python isupper() 函数返回 True/False 的 udf

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()

推荐阅读