如何检查列是否仅包含某些字母

How to check if a column only contains certain letters

我有一个数据框,我想检查一个仅包含字母 A 的列。

该列包含很多字母。看起来像:

AAAAAAAAAAAAAAAAAA AAABBBBBDBBSBSBB

我想检查此列是否只包含字母 A,或者同时包含字母 A 或 B,但没有其他内容。

你知道我要用哪个功能吗?

像这样使用。 官方文档中的示例:

df.filter(df.name.rlike('ice$')).collect()
[Row(age=2, name='Alice')]

http://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=regex#pyspark.sql.Column.rlike

试试这个:我考虑了四个字母样本。我们可以在 spark 中使用 rlike 函数。我使用了 [^AB] 的正则表达式。这将 return true 显示为具有 AB 以外的字母的列值,并且 False 将显示为具有 A 或 B 或同时具有 AB 的值.我们可以过滤掉 False,这就是您的答案。

    from pyspark.sql import SparkSession
    from pyspark.sql import functions as F

    spark = SparkSession.builder \
        .appName('SO')\
        .getOrCreate()

    li = [[("AAAAAAAAAAAAAAAAAAABBBBBDBBSBSBB")], [("AAAAAAAAA")],[("BBBBBBBB")], [("AAAAAABBBBBBBB")]]

    df = spark.createDataFrame(li, ["letter"])

    df.show(truncate=False)

    # 
    # +--------------------------------+
    # |letter                          |
    # +--------------------------------+
    # |AAAAAAAAAAAAAAAAAAABBBBBDBBSBSBB|
    # |AAAAAAAAA                       |
    # |BBBBBBBB                        |
    # |AAAAAABBBBBBBB                  |
    # +--------------------------------+

    df1 = df.withColumn("contains_A_or_B", F.col('letter').rlike("[^AB]"))

    df.show(truncate=False)

      +--------------------------------+---------------+
    # |letter                          |contains_A_or_B|
    # +--------------------------------+---------------+
    # |AAAAAAAAAAAAAAAAAAABBBBBDBBSBSBB|true           |
    # |AAAAAAAAA                       |false          |
    # |BBBBBBBB                        |false          |
    # |AAAAAABBBBBBBB                  |false          |
    # +--------------------------------+---------------+
    df1.filter(F.col('contains_A_or_B')==False).select("letter").show()


    # +--------------+
    # |        letter|
    # +--------------+
    # |     AAAAAAAAA|
    # |      BBBBBBBB|
    # |AAAAAABBBBBBBB|
    # +--------------+