问题描述
我有一个像这样的 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()