我被一个看似简单的问题困住了,但我看不出我做错了什么,也看不出.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”的两个重复项中的一个。这是我搞不懂的。你知道吗
有些事情我已经排除了: -列类型 -输入的pk类型错误 -手动传入列名以进行双重检查
我能想到的另一件事是数据正在被分区,据我所知,dropDuplicates()只保留每个分区中的第一个匹配项(参见这里:spark dataframe drop duplicates and keep first)。在我的例子中,这似乎不太可能,因为我的测试数据很小。你知道吗
我没有主意了。有人知道为什么会发生这种行为吗?你知道吗
这里的问题应该是“
date6
”。如果它的“data6
”,则按预期删除重复项。这可能是因为date
被认为是python中的数据类型。你知道吗相关问题 更多 >
编程相关推荐