PySpark何时/否则多个条件

时间:2019-02-06 04:57:48

标签: pyspark pyspark-sql

具有在某些特定条件下要过滤掉的数据框。根据过滤条件,结果为1或0。以前,如果我仅拆分数据框以查找匹配项,则此方法有效。我决定对其进行一些更改,并希望全部结果和适当标记它们的功能。这是我尝试过的一个小例子。

matches = df.withColumn('MATCHES', f.when(
                   ((df.NAME >= 0.9) & (df.STREET >= 0.7) & (sdf.STREETNUM >= 0.7))
                                 |
                   ((df.PHONE == 1) & (sdf.NAME == 1) & (df.STREET == 1) & (df.CITY == 1) & (df.STREETNUM == 1)), 1).otherwise(0))

通过此作业的每个记录都应在新列中附加1或0。 1是匹配项,0是不匹配项。例如:输入文件有50,000条记录,我希望50,000个结果中的每个结果都为0或1。当我以前让此代码块仅对复合条件进行简单过滤时,我将得到大约2500 1,这是正确的。向其中添加withColumn / when / otherwise组件已更改了我的结果集,由于条件和输入文件未更改,我无法理解为什么。例如,输出现在有4个1和2400 0个。以前有2500个1,其余则为0。

预期结果将类似于

+------+------+------------+------------+------------+-------+
|NAME  |PHONE |STREET      |STREETNUM   |CITY        |MATCHES|
+------+------+------------+------------+------------+-------+
|.97   |  .94 |      .88   |     .77    |    .99     |   1   |
|.43   |  .78 |      .76   |     .87    |    .64     |   0   |
|.62   |  .21 |      .98   |     .50    |    .02     |   0   |
|.78   |  .96 |      .11   |     .10    |    .05     |   0   |
|.99   |  .99 |      .99   |     .99    |    .99     |   1   |
+------+------+------------+------------+------------+-------+

0 个答案:

没有答案