0

我有一个像这样的 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"))
4

2 回答 2

2

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

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

或限制非生肖之前

zodiac_rows = df.where(f.col("col1").rlike("(?<!non)zodiac")) 
于 2021-02-02T21:50:15.793 回答
0

where您可以使用逻辑not运算符与“非黄道带”相反

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

此外,还有filter可能以不同方式帮助您的功能

zodiac_rows = df.filter(~f.col('col1').contains('nonzodiac')).collect()
              
于 2021-02-02T22:12:35.223 回答