PySpark дает мне немного странные результаты после dropDuplicates и объединения наборов данных. Ситуация такова, что есть два очень больших набора данных: один с идентификатором людей и некоторыми переменными, а второй с их кодом региона.
первый набор данных:
ID|VAR1|VAR2|VAR3|VAR4|VAR5|
1|-----|----|---|---|----|
2|-----|----|---|---|----|
3|-----|----|---|---|----|
4|-----|----|---|---|----|
второй набор данных:
ID|region_code|
1|7|
2|5|
1|9|
4|7|
результат, который я получаю после следующего кода:
file_1 = file_1.dropDuplicates(["ID"])
file_2 = file_2.dropDuplicate(["ID"])
file_2.filter(filter("ID == '1'").show()
ID|region_code|
1|7|
После присоединения файлов я ожидаю:
merge_file = file_1.join(file_2, "ID", "left")
ID|VAR1|VAR2|VAR3|VAR4|VAR5|region_code|
1|-----|----|---|---|----|7|
2|-----|----|---|---|----|5|
3|-----|----|---|---|----|null|
4|-----|----|---|---|----|7|
но я получил:
merge_file.filter("ID == '1'").show()
ID|VAR1|VAR2|VAR3|VAR4|VAR5|region_code|
1|-----|----|---|---|----|9|
Мне очень любопытны эти странные результаты.
dropDuplicates
это та функция, которую вы ищете здесь. В вашем примереID == 1
имеет два связанных региона. Удаление дубликатаID
приведет к произвольному выбору региона для каждогоID
, а затем к удалению остальных, что не является надежным поведением. - person vielkind   schedule 31.05.2018file_2.dropDuplicates(["ID", "region_code"])
? и почему первый примененный фильтр к файлу_2 дает после того, как dropDuplicates даетID|region_code| 1|7|
- person default_settings   schedule 31.05.2018