如何检查列是否仅包含某些字母
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')]
试试这个:我考虑了四个字母样本。我们可以在 spark 中使用 rlike
函数。我使用了 [^AB]
的正则表达式。这将 return 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|
# +--------------+
我有一个数据框,我想检查一个仅包含字母 A 的列。
该列包含很多字母。看起来像:
AAAAAAAAAAAAAAAAAA AAABBBBBDBBSBSBB
我想检查此列是否只包含字母 A,或者同时包含字母 A 或 B,但没有其他内容。
你知道我要用哪个功能吗?
像这样使用。 官方文档中的示例:
df.filter(df.name.rlike('ice$')).collect()
[Row(age=2, name='Alice')]
试试这个:我考虑了四个字母样本。我们可以在 spark 中使用 rlike
函数。我使用了 [^AB]
的正则表达式。这将 return 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|
# +--------------+