如何根据另一个pyspark数据框中的唯一记录选择记录,或选择值为“未知”

时间:2019-05-21 14:06:21

标签: pyspark

我想在下面将用R编写的循环重写为Pyspark。

for (i in unique(fix_map[!is.na(area)][order(area), area]))  {
 # select all contact records from the currently processed area, and also those without area assigned
 m_f_0 <- unique(con_melt[area == i | area == "Unknown"])
  1. con_melt也具有“未知”值

  2. 所以我想基于“ area”和“ con” con_melt记录选择在fix_map和con_melt中存在的通用记录,对于这些记录,列“ area”值也是“ Unknown”。

我尝试在pyspark中使用join,但随后我失去了“未知”值。

请建议如何处理

fix_map:

       id        value area type
1: 227149 385911000059  510  mob
2: 122270 385911000661  110  fix

con_melt:

       id area type
1: 227149 510  mob
2: 122270 100  fix
3. 122350 Unknown fix

输出应该是:

                value       area      type
1:              385994266007 510      mob
2:              122350       Unknown  fix

1 个答案:

答案 0 :(得分:1)

尝试一下-

为了便于说明,我将联接,过滤器和联合保持在单独的数据框中。这些可以合并。

from pyspark.sql import functions as psf

join_condition = [psf.col('a.area') == psf.col('b.area')]


df1 = fix_map.alias("a").join(con_melt.alias("b"), join_condition).select('a.id','a.area','a.type')

df2 = con_melt.filter("area == 'Unknown'").select('id','area','type')

df1.union(df2).show()

#+------+-------+----+
#|    id|   area|type|
#+------+-------+----+
#|227149|    510| mob|
#|122350|Unknown| fix|
#+------+-------+----+

我认为areaStringType,因为其中包含“未知”