PySpark:动态滤镜

时间:2018-09-13 08:17:28

标签: python filter pyspark

我目前正在尝试实现动态过滤器。问题是,我有一个动态的列列表-并且我正在生成包含TRUE或FALSE的新列。在这些新列上,我要选择

  1. 所有记录,其中所有列均为TRUE
  2. 所有记录,其中一列为FALSE(并对其进行转换)

举个例子,这里是输入数据集(连同TRUE / FALSE列):

sc = SparkContext.getOrCreate()

df = sc.parallelize([('a','a1',True,'aa','aa1',True),
                      ('b','b1',False,'bb','bb1',True),
                      ('c','c1',False,'cc','cc1',False)]).toDF(
                    ["a_1","a_1_new","a_1_suc","b_1","b_1_new","b_1_suc"])  

想法是,最终数据集始终具有按3组的列-一个_1,一个_1_new和一个_1_suc。

现在最终结果应该是一个数据帧,例如

a_1    a_1_new     a_1_suc     b_1     b_1_new     b_1_suc
a      a1          True        aa      aa1         True

我已经开始使用它了-只是显式地使用

df.filter(((F.col("a_1_suc") == 'True') & (F.col("b_1_suc")` == 'True')))

但是,这不是动态的-可能有c / d / e列,因此c_1_suc / d_1_suc和e_1_suc必须为真。这可能吗?

类似地,a_1_suc ='False'的情况-但是,在这里我想拆分行:

Name_1       Name_1_new       Name_1_suc
b            b1               False
c            c1               False
cc           cc1              False

在这里,缺少2点:首先像上面的示例一样显式过滤行,仅使用|。代替&-是否还可以动态地实现?

第二,考虑到数据框中可以有多列,我该如何将行拆分(必要时)。

谢谢您的问候。

0 个答案:

没有答案