Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pyspark 如何检查列是否只包含某些字母_Pyspark_Apache Spark Sql_Pyspark Dataframes - Fatal编程技术网

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

Pyspark 如何检查列是否只包含某些字母,pyspark,apache-spark-sql,pyspark-dataframes,Pyspark,Apache Spark Sql,Pyspark Dataframes,我有一个数据框,我想检查一个只包含字母a的列 这一栏有很多字母。它看起来像: aaaaaaaaaaaaaaaaaa aaabbbbbbbsbsbsbbb 我想检查此列是否只包含字母A,或者同时包含字母A或B,而不包含其他内容 你知道我应该使用哪种功能吗?像使用rlike一样使用。 官方文件中的示例: df.filter(df.name.rlike('ice$')).collect() [Row(age=2, name='Alice')] 使用rlike。 官方文件中的示例: df.filter

我有一个数据框,我想检查一个只包含字母a的列

这一栏有很多字母。它看起来像:

aaaaaaaaaaaaaaaaaa aaabbbbbbbsbsbsbbb

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

你知道我应该使用哪种功能吗?

像使用rlike一样使用。 官方文件中的示例:

df.filter(df.name.rlike('ice$')).collect()
[Row(age=2, name='Alice')]
使用rlike。 官方文件中的示例:

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

试试这个:我考虑了四封信的样本。我们可以在spark中使用
rlike
函数。我使用了
[^AB]
的正则表达式。这会将
true
返回到除
A
B
之外的其他字母的列值,并且
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|
    # +--------------+

试试这个:我考虑了四封信的样本。我们可以在spark中使用
rlike
函数。我使用了
[^AB]
的正则表达式。这会将
true
返回到除
A
B
之外的其他字母的列值,并且
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|
    # +--------------+