代码之家  ›  专栏  ›  技术社区  ›  Yogita Aher

如何使用pyspark在下面的代码中传递数组(多列)

  •  0
  • Yogita Aher  · 技术社区  · 7 年前

    如何使用以下命令在pyspark中传递数组列表(多列)而不是单列:

    new_df = new_df.filter(new_df.color.isin(*filter_list) == False)

    例如:-

    filter_list = ['##', '$']
    
    new_df = new_df.filter(new_df.color.isin(*filter_list) == False)
    

    在本例中,“颜色”是列。

    但是我想把垃圾(#,##,$,$$$)值与多个发生数一起移除到多个列中。

    样本输入:-

    id       name       Salary
    
    #        Yogita     3000
    
    2        Bhavana    5000
    
    $$       ###        7000
    
    %$4#     Neha       $$$$
    

    样本输出:-

     id         name       salary
    
     2        Bhavana      5000
    

    谁来帮帮我,

    提前感谢,

    酸奶

    1 回复  |  直到 7 年前
        1
  •  1
  •   ags29    7 年前

    以下是使用用户定义函数的答案:

    from pyspark.sql.types import *
    from itertools import chain
    
    filter_list = ['#','##', '$', '$$$']
    def filterfn(*x):
        booleans=list(chain(*[[filter not in elt for filter in filter_list] for elt in x]))
        return(reduce(lambda x,y: x and y, booleans, True))
    
    filter_udf=f.udf(filterfn, BooleanType())
    new_df.filter(filter_udf(*[col for col in new_df.columns])).show(10)