У меня есть одно преобразование, единственная цель которого - удалить дубликаты. При использовании PySpark 2.x результирующий вывод удаляет некоторые дубликаты, но не все. При использовании Apache Spark Java 2.x результирующий вывод будет таким, как ожидается, со всеми удаленными дубликатами.
В настоящее время я запускаю Spark на YARN. Мой набор данных составляет примерно 125 миллионов строк на 200 столбцов. Ожидается, что некоторые столбцы содержат нулевые значения. Для моего случая использования у меня действительно есть чистые дубликаты (причины этого выходят за рамки). До сих пор я пытался:
- dropDuplicates (df.columns) / dropDuplicates (), PySpark -> удаляет некоторые, но не все дубликаты
- different (), PySpark -> dropнекоторые, но не все дубликаты, количество строк отличается от 1.
- dropDuplicates ([primary_key_I_created]), PySpark -> работает
- dropDuplicates (dataset.columns ()), Apache Spark Java -> работает
Я проверил физические планы, и метод 1 и метод 4 дают одинаковые планы. Они примерно таковы:
+-HashAggregate(keys=[column_1, column_2, .... 198 more fields], functions=[], output=[column_1, column_2, ... 198 more fields]
+-Exchange hashpartitioning(column_1, column_2, ... 198 more fields)
+-HashAggregate(keys=[column_1, column_2, .... 198 more fields], functions=[], output=[column_1, column_2, ... 198 more fields]
+-FileScan parquet ....
Ниже приведен пример пары строк, которые являются дубликатами, которые не были отброшены. Я подтвердил, что нет никаких странных ошибок пробелов, выполнив dropDuplicates () только для этих двух строк. Этот прогон сработал, как и ожидалось, вернув одну строку.
column_1 | column_2 | column_3 | column_4 | column_5| ..... column_200
bob jones **null** **null** 200.00 30
bob jones **null** **null** 200.00 30
Есть ли что-то происходящее под колпаком, которое может привести к сбою PySpark, но Spark Java будет успешным (извинения за мой расплывчатый жаргон здесь)? Заранее спасибо.