如何在pysparkDataframe中删除重复项但保持第一个?

yuvru6vn  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(600)

我试图从Dataframe中删除重复项,但不应删除第一个条目。除第一条记录外,其他所有的副本都应存储在一个单独的Dataframe中。
例如,如果Dataframe类似于:

  1. col1,col2,col3,col4
  2. r,t,s,t
  3. a,b,c,d
  4. b,m,c,d
  5. a,b,c,d
  6. a,b,c,d
  7. g,n,d,f
  8. e,f,g,h
  9. t,y,u,o
  10. e,f,g,h
  11. e,f,g,h

在这种情况下,我应该有两个Dataframe。

  1. df1:
  2. r,t,s,t
  3. a,b,c,d
  4. b,m,c,d
  5. g,n,d,f
  6. e,f,g,h
  7. t,y,u,o

其他Dataframe应为:

  1. a,b,c,d
  2. a,b,c,d
  3. e,f,g,h
  4. e,f,g,h
swvgeqrz

swvgeqrz1#

尝试使用 window row_number() 功能。 Example: ```
df.show()

+----+----+----+----+

|col1|col2|col3|col4|

+----+----+----+----+

| r| t| s| t|

| a| b| c| d|

| b| m| c| d|

| a| b| c| d|

| a| b| c| d|

| g| n| d| f|

| e| f| g| h|

| t| y| u| o|

| e| f| g| h|

| e| f| g| h|

+----+----+----+----+

from pyspark.sql import *
from pyspark.sql.functions import *

w=Window.partitionBy("col1","col2","col3","col4").orderBy(lit(1))

df1=df.withColumn("rn",row_number().over(w)).filter(col("rn")==1).drop("rn")

df1.show()

+----+----+----+----+

|col1|col2|col3|col4|

+----+----+----+----+

| b| m| c| d|

| r| t| s| t|

| g| n| d| f|

| t| y| u| o|

| a| b| c| d|

| e| f| g| h|

+----+----+----+----+

df2=df.withColumn("rn",row_number().over(w)).filter(col("rn")>1).drop("rn")
df2.show()

+----+----+----+----+

|col1|col2|col3|col4|

+----+----+----+----+

| a| b| c| d|

| a| b| c| d|

| e| f| g| h|

| e| f| g| h|

+----+----+----+----+

展开查看全部

相关问题