代码之家  ›  专栏  ›  技术社区  ›  PineNuts0

pyspark:在文本和子集数据框中搜索子字符串

  •  2
  • PineNuts0  · 技术社区  · 6 年前

    我是新来的 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 
    

    当我尝试运行上述程序时,我得到以下错误:

    分析异常:u“无法从原始问题中提取值207: 需要结构类型,但得到字符串;。

    1 回复  |  直到 6 年前
        1
  •  4
  •   pault Tanjin    6 年前

    在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')
    

    但数据帧方法是首选的,因为它们将更快。