python - 过滤前两个字符为大写的列值
问题描述
我正在尝试使用 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 的相对新手,所以任何建议都将不胜感激。
提前致谢!
解决方案
您可以使用 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()
推荐阅读
- go-cd - 从日志中找出启动问题
- angular - 如何获取点击列表项的上下文以在 Nativescript TS 的另一个页面中显示详细信息
- python - 使用 mysql-python 连接器时出现 SSL 连接错误
- java - 如何在调用另一个构造函数之前拆分字符串
- c# - 如何加载名称与exe文件名无关的配置文件
- javascript - 对象不是构造函数
- html - 表格单元格在行内的高度不同
- javascript - TypeError:将状态设置为数组时,this.state.posts.map 不是函数
- javascript - Formset management_form 刷新后给出错误的 TOTAL_FORMS 值
- python - 合并两个 DataFrame 但更新原始列