微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pyspark:如何根据字符串和前缀的缺失过滤数据框?

如何解决Pyspark:如何根据字符串和前缀的缺失过滤数据框?

我有一个像这样的 pyspark 数据框,其中包含“zodiac”的行和“nonzodiac”的行

spark.createDataFrame(
    [
        (1,'1234ESPNnonzodiac'),(2,'1234ESPNzodiac'),(3,'963CNNnonzodiac'),(4,'963CNNzodiac'),],['id','col1'] 
)

我可以像这样获得所有非黄道带行:

nonzodiac_rows = df.where(f.col("col1").rlike("nonzodiac"))

但是我无法仅返回带有“zodiac”的行,因为执行类似的操作会同时返回 zodiac 和 nonzodiac 行

zodiac_rows = df.where(f.col("col1").rlike("zodiac"))

解决方法

这是因为 nonzodiac 包含 zodiac 子串。您需要编写更严格的正则表达式 例如再添加一个字符:

zodiac_rows = df.where(f.col("col1").rlike("Nzodiac"))

或者在生肖之前限制非

zodiac_rows = df.where(f.col("col1").rlike("(?<!non)zodiac")) 
,

您可以使用逻辑 where 运算符

执行与“非黄道带”not 相反的操作
zodiac_rows = df.where(~f.col("col1").rlike("nonzodiac"))

此外,filter 函数可以以不同的方式帮助您

zodiac_rows = df.filter(~f.col('col1').contains('nonzodiac')).collect()
              

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。