Pin*_*ts0 2 string search substring subset pyspark
我是全新的pyspark,想将我现有的pandas/python代码转换为PySpark.
我想对 my 进行子集化,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
Run Code Online (Sandbox Code Playgroud)
当我尝试运行上述程序时,出现以下错误:
AnalysisException: u"无法从 original_problem#207 中提取值:需要结构类型但得到字符串;"
在 pyspark 中,试试这个:
df = df[df['original_problem'].rlike('|'.join(searchfor))]
Run Code Online (Sandbox Code Playgroud)
或等效地:
import pyspark.sql.functions as F
df.where(F.col('original_problem').rlike('|'.join(searchfor)))
Run Code Online (Sandbox Code Playgroud)
或者,您可以选择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')
Run Code Online (Sandbox Code Playgroud)
但是 DataFrame 方法是首选,因为它们会更快。
| 归档时间: |
|
| 查看次数: |
7876 次 |
| 最近记录: |