在 pyspark 数据框中使用 write.partitionBy 时如何删除重复项?
Posted
技术标签:
【中文标题】在 pyspark 数据框中使用 write.partitionBy 时如何删除重复项?【英文标题】:How to drop duplicates while using write.partitionBy in a pyspark dataframe? 【发布时间】:2020-10-07 21:40:40 【问题描述】:我有一个如下所示的数据框:
|------------|-----------|---------------|---------------|
| Name | Type | Attribute 1 | Attribute 2 |
|------------|-----------|---------------|---------------|
| Roger | A | X | Y |
|------------|-----------|---------------|---------------|
| Roger | A | X | Y |
|------------|-----------|---------------|---------------|
| Roger | A | X | Y |
|------------|-----------|---------------|---------------|
| Rafael | A | G | H |
|------------|-----------|---------------|---------------|
| Rafael | A | G | H |
|------------|-----------|---------------|---------------|
| Rafael | B | G | H |
|------------|-----------|---------------|---------------|
我想根据名称和类型对该数据帧进行分区并保存到磁盘
这行代码目前是这样的,
df.write.partitionBy("Name", "Type").mode("append").csv("output/", header=True)
输出得到正确保存,但有重复的行,如下所述
在文件夹中
/输出/罗杰/A
|---------------|---------------|
| Attribute 1 | Attribute 2 |
|---------------|---------------|
| X | Y |
|---------------|---------------|
| X | Y |
|---------------|---------------|
| X | Y |
|---------------|---------------|
/输出/拉斐尔/A
|---------------|---------------|
| Attribute 1 | Attribute 2 |
|---------------|---------------|
| G | H |
|---------------|---------------|
| G | H |
|---------------|---------------|
/输出/拉斐尔/B
|---------------|---------------|
| Attribute 1 | Attribute 2 |
|---------------|---------------|
| G | H |
|---------------|---------------|
如您所见,此 csv 包含重复项。使用 write.partitionbY 时如何删除这些重复项?
【问题讨论】:
【参考方案1】:在写之前使用.distinct()
。
df.distinct().write.partitionBy("Name", "Type").mode("append").csv("output/", header=True)
【讨论】:
这会在 patitionBy 之后还是之前进行下降?在创建重复列的 write.partitionBy 时,Spark 倾向于删除 Name 和 Type 列。 它会在写入 csv 之前删除重复项。因此,您不应在输出文件中看到任何重复项。是的,Spark 不会写入name
和 type
字段,因为它们已经在 partitionBy 子句中。以上是关于在 pyspark 数据框中使用 write.partitionBy 时如何删除重复项?的主要内容,如果未能解决你的问题,请参考以下文章
在 pyspark 数据框中使用 write.partitionBy 时如何删除重复项?