Я застрял на том, что кажется простой проблемой, но я не вижу, что я делаю неправильно, или почему не работает ожидаемое поведение .dropDuplicates ().
переменная, которую я использую:
print type(pk)
<type 'tuple'>
print pk
('column1', 'column4')
У меня есть датафрейм:
df_new.show()
+-------+----------------+---------+-------+-------------+-----------------+
|column1| column2| column3|column4|dml_operation| ingest_date|
+-------+----------------+---------+-------+-------------+-----------------+
| data6| z| update| z| 2|20190308190720942|
| data7| y| update| y| 2|20190308190720942|
| data8| x| update| x| 2|20190308190720942|
| data9| f| f| f| 0|20190308190720942|
| data1| d| b| c| 2|20190308190720942|
| data4| f| c| b| 1|20190308190720942|
| data3| a| b| b| 0|20190308190720942|
| date6|this should drop|more text| z| 2|20190308190720942|
| data8|this should drop| here| x| 1|20190308190720942|
| date6|this should drop|more text| z| 0|20190308190720942|
+-------+----------------+---------+-------+-------------+-----------------+
тогда я выполняю:
print_df = df_new.dropDuplicates(pk)
print_df.show()
+-------+----------------+---------+-------+-------------+-----------------+
|column1| column2| column3|column4|dml_operation| ingest_date|
+-------+----------------+---------+-------+-------------+-----------------+
| data3| a| b| b| 0|20190308190720942|
| date6|this should drop|more text| z| 2|20190308190720942|
| data7| y| update| y| 2|20190308190720942|
| data8| x| update| x| 2|20190308190720942|
| data9| f| f| f| 0|20190308190720942|
| data4| f| c| b| 1|20190308190720942|
| data6| z| update| z| 2|20190308190720942|
| data1| d| b| c| 2|20190308190720942|
+-------+----------------+---------+-------+-------------+-----------------+
Как видите, функция работает должным образом для строк, содержащих "data8 и x", но отбрасывает только один из двух дубликатов для "data6 и z". Это то, что я не могу понять.
Некоторые вещи, которые я уже исключил:
- типы столбцов
- неправильный тип ПК в
- вручную передается в именах столбцов для двойной проверки
Единственное, о чем я могу думать, это то, что данные разбиваются на разделы, и, насколько мне известно, .dropDuplicates () сохраняет только первое вхождение в каждом разделе (см. Здесь: spark, dataframe отбрасывает дубликаты и сохраняет их первым ). Это кажется маловероятным в моем случае, так как мои тестовые данные невелики.
У меня нет идей. Кто-нибудь видит, почему происходит такое поведение?