Pyspark:如何根据字符串和前缀的缺失过滤数据帧?
我有一个像这样的pyspark数据框,其中有“zodiac”的行和有“nonzodiac”的行Pyspark:如何根据字符串和前缀的缺失过滤数据帧?,pyspark,apache-spark-sql,pyspark-dataframes,rlike,Pyspark,Apache Spark Sql,Pyspark Dataframes,Rlike,我有一个像这样的pyspark数据框,其中有“zodiac”的行和有“nonzodiac”的行 spark.createDataFrame( [ (1, '1234ESPNnonzodiac'), (2, '1234ESPNzodiac'), (3, '963CNNnonzodiac'), (4, '963CNNzodiac'), ], ['id', 'col1'] ) 我可以得到所有非黄道带行,如下
spark.createDataFrame(
[
(1, '1234ESPNnonzodiac'),
(2, '1234ESPNzodiac'),
(3, '963CNNnonzodiac'),
(4, '963CNNzodiac'),
],
['id', 'col1']
)
我可以得到所有非黄道带行,如下所示:
nonzodiac_rows = df.where(f.col("col1").rlike("nonzodiac"))
但是我很难只返回带有“zodiac”的行,因为做类似的操作会同时返回zodiac行和非zodiac行
zodiac_rows = df.where(f.col("col1").rlike("zodiac"))
这是因为非黄道带包含黄道带子串。您需要编写更严格的regexp 例如,再添加一个字符:
zodiac_rows = df.where(f.col("col1").rlike("Nzodiac"))
或者在黄道带之前限制非黄道带
zodiac_rows = df.where(f.col("col1").rlike("(?<!non)zodiac"))
zodiac_rows=df.where(f.col(“col1”).rlike((?这是因为非zodiac包含zodiac子字符串。您需要编写更严格的regexp
例如,再添加一个字符:
zodiac_rows = df.where(f.col("col1").rlike("Nzodiac"))
或者在黄道带之前限制非黄道带
zodiac_rows = df.where(f.col("col1").rlike("(?<!non)zodiac"))
zodiac_rows=df.where(f.col(“col1”).rlike((?您可以使用逻辑not
运算符执行与“non-zodiac”where
相反的操作
zodiac_rows = df.where(~f.col("col1").rlike("nonzodiac"))
此外,还有过滤器
功能可以以不同的方式帮助您
zodiac_rows = df.filter(~f.col('col1').contains('nonzodiac')).collect()
您可以使用逻辑not
运算符执行与“非黄道带”相反的where
zodiac_rows = df.where(~f.col("col1").rlike("nonzodiac"))
此外,还有过滤器
功能可以以不同的方式帮助您
zodiac_rows = df.filter(~f.col('col1').contains('nonzodiac')).collect()
(?!non)zodiac
=zodiac
因为zod
不等于non
@WiktorStribiżew非常感谢,修复了bug(?!non)zodiac
=zodiac
因为zod
不等于non
@WiktorStribiżew非常感谢,修复了这个bug