从pyspark中的数据框中删除重复项

时间:2015-06-26 03:08:29

标签: python apache-spark pyspark

我在本地pyspark 1.4中乱搞数据帧,并且在使用drop duplicates方法时遇到问题。继续返回错误“AttributeError:'list'对象没有属性'dropDuplicates'”。不太清楚为什么我似乎遵循latest documentation中的语法。好像我错过了该功能的导入或其他东西。

#loading the CSV file into an RDD in order to start working with the data
rdd1 = sc.textFile("C:\myfilename.csv").map(lambda line: (line.split(",")[0], line.split(",")[1], line.split(",")[2], line.split(",")[3])).collect()

#loading the RDD object into a dataframe and assigning column names
df1 = sqlContext.createDataFrame(rdd1, ['column1', 'column2', 'column3', 'column4']).collect()

#dropping duplicates from the dataframe
df1.dropDuplicates().show()

2 个答案:

答案 0 :(得分:23)

这不是一个进口问题。您只需在错误的对象上调用.dropDuplicates()即可。虽然sqlContext.createDataFrame(rdd1, ...)的等级为pyspark.sql.dataframe.DataFrame,但在您应用.collect()后,它是纯Python list,并且列表不提供dropDuplicates方法。你想要的是这样的:

 (df1 = sqlContext
     .createDataFrame(rdd1, ['column1', 'column2', 'column3', 'column4'])
     .dropDuplicates())

 df1.collect()

答案 1 :(得分:7)

如果您有数据框并希望删除所有重复项 - 请参阅特定列中的重复项(称为' colName'):

在重复数据删除之前计算:

application-dev.properties

进行重复数据删除(将要删除的列转换为字符串类型):

df.count()

可以使用已排序的groupby来检查是否已删除重复项:

from pyspark.sql.functions import col
df = df.withColumn('colName',col('colName').cast('string'))

df.drop_duplicates(subset=['colName']).count()