pyspark 跨多列搜索子字符串

mm9b1k5b  于 2023-02-11  发布在  Spark
关注(0)|答案(2)|浏览(137)

我正在尝试使用PySpark在我的spark Dataframe 的所有列中查找子字符串。我目前知道如何使用filter在一列中搜索子字符串,并且包含:

df.filter(df.col_name.contains('substring'))

我如何扩展这个语句,或者利用另一个语句,来搜索多个列中的子字符串匹配项?

70gysomp

70gysomp1#

你可以一次概括过滤器的语句:

from pyspark.sql.functions import col, count, when
# Converts all unmatched filters to NULL and drops them.
df = df.select([when(col(c).contains('substring'), col(c)).alias(c) for c in df.columns]).na.drop()


您可以简单地遍历列并应用相同的过滤器:

for col in df.columns:
    df = df.filter(df[col].contains("substring"))
57hvy0tb

57hvy0tb2#

您可以搜索所有列并填充下一个 Dataframe 和联合结果,如下所示:

columns = ["language", "else"]
data = [
    ("Java", "Python"),
    ("Python", "100000"),
    ("Scala", "3000"),
]
df = spark.createDataFrame(data).toDF(*columns)
df.cache()
df.show()

schema = df.schema
df2 = spark.createDataFrame(data=[], schema=schema)

for col in df.columns:
    df2 = df2.unionByName(df.filter(df[col].like("%Python%")))

df2.show()
+--------+------+
|language|  else|
+--------+------+
|  Python|100000|
|    Java|Python|
+--------+------+

结果将包含前2行,因为它们在某些列中具有值“Python”。

相关问题