Pyspark数据帧未删除所有重复项

2024-09-27 07:27:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我被一个看似简单的问题困住了,但我看不出我做错了什么,也看不出.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)。在我的例子中,这似乎不太可能,因为我的测试数据很小。你知道吗

我没有主意了。有人知道为什么会发生这种行为吗?你知道吗


Tags: textdfmoreupdatethisdropprintpk
1条回答
网友
1楼 · 发布于 2024-09-27 07:27:46

这里的问题应该是“date6”。如果它的“data6”,则按预期删除重复项。这可能是因为date被认为是python中的数据类型。你知道吗

>>> 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|
|  data6|this should drop|more text|      z|            2|20190308190720942|
|  data8|this should drop|     here|      x|            1|20190308190720942|
|  data6|this should drop|more text|      z|            0|20190308190720942|
+   -+        +    -+   -+      -+        -+

>>> df_new.dropDuplicates(['column1','column4']).show()
+   -+   -+   -+   -+      -+        -+
|column1|column2|column3|column4|dml_operation|      ingest_date|
+   -+   -+   -+   -+      -+        -+
|  data3|      a|      b|      b|            0|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|
+   -+   -+   -+   -+      -+        -+

相关问题 更多 >

    热门问题