我想在下面将用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"])
con_melt也具有“未知”值
所以我想基于“ 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
答案 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|
#+------+-------+----+
我认为area
为StringType
,因为其中包含“未知”