string - PySpark:搜索文本和子集数据框中的子字符串

标签 string search pyspark substring subset

我是 pyspark 的新手,希望将现有的 pandas/python 代码转换为 PySpark

我想对我的 dataframe 进行子集化,以便仅返回包含我在 'original_problem' 字段中查找的特定关键字的行。

下面是我在 PySpark 中尝试的 Python 代码:

def pilot_discrep(input_file):

    df = input_file 

    searchfor = ['cat', 'dog', 'frog', 'fleece']

    df = df[df['original_problem'].str.contains('|'.join(searchfor))]

    return df 

当我尝试运行上述代码时,出现以下错误:

AnalysisException: u"Can't extract value from original_problem#207: need struct type but got string;"

最佳答案

在 pyspark 中,尝试以下操作:

df = df[df['original_problem'].rlike('|'.join(searchfor))]

或者等效的:

import pyspark.sql.functions as F
df.where(F.col('original_problem').rlike('|'.join(searchfor)))

或者,您可以选择udf:

import pyspark.sql.functions as F

searchfor = ['cat', 'dog', 'frog', 'fleece']
check_udf = F.udf(lambda x: x if x in searchfor else 'Not_present')

df = df.withColumn('check_presence', check_udf(F.col('original_problem')))
df = df.filter(df.check_presence != 'Not_present').drop('check_presence')

但是 DataFrame 方法是首选,因为它们更快。

关于string - PySpark:搜索文本和子集数据框中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50414316/

相关文章:

java - 在复杂的定界符上有条件地拆分字符串

c++ - 一个 C++ 字符串可以容纳多少个字符?

java - 在给定矩阵中搜索值密度的最佳方法是什么?

python - 如何获得在 Spark 1.5.2 中使用 HiveContext 制作的 PySpark DataFrame?

python - ModuleNotFoundError 因为 PySpark 序列化程序无法找到库文件夹

python - 列出 Pyspark 中的 S3 文件

javascript - 如何在javascript中使用多个规则拆分字符串

c - 我如何在 c 中以这种方式获取 substr?

php - 使用 MySQL 面向 future 的邻近搜索

php - 搜索查询的干净 URL?