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

Pyspark: How to filter dataframe based on string and absence of prefix?

我有一个 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' 的行,因为做了类似的事情 returns 黄道带和非黄道带行

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

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

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

或限制非生肖前

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

您可以使用逻辑 not 运算符

执行与您的“非十二生肖”相反的操作 where
zodiac_rows = df.where(~f.col("col1").rlike("nonzodiac"))

除此之外,还有一个filter功能可能会以不同的方式帮助你

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