Как выбрать записи в одном фрейме данных pyspark на основе уникальных записей в другом или со значением Unknown - PullRequest
0 голосов
/ 21 мая 2019

Я хочу переписать ниже для цикла, записанного в 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. Поэтому я хочу выбрать общие записи, которые присутствуют в fix_map и con_melt на основе записей "area" и AND con_melt, для которых значение столбца "area" также равно "Unknown".

Я попытался использовать объединение в pyspark, но затем теряю значение «Неизвестно».

Пожалуйста, предложите, как с этим справиться

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 Ответ

1 голос
/ 22 мая 2019

Попробуйте это -

Я сохранил объединение, фильтрацию и объединение в отдельном фрейме данных для простоты объяснения. Они могут быть объединены.

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, поскольку он содержит «Неизвестный»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...