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()
我有一个 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()