筛选前两个字符为大写的列值
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()
我正在尝试使用 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()