2015-06-26 3 views
5

Я возился с dataframes в pyspark 1.4 локально, и у меня возникают проблемы с тем, что метод drop duplicates работает. Продолжает возвращать ошибку. Объект AttributeError: 'list' не имеет атрибута 'dropDuplicates'. Не совсем уверен, почему, поскольку я, кажется, следую синтаксису в latest documentation. Похоже, что мне не хватает импорта для этой функциональности или чего-то еще.удалять дубликаты из dataframe в pyspark

#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() 

ответ

8

Это не проблема с импортом. Вы просто вызываете .dropDuplicates() на неправильный объект. В то время как класс sqlContext.createDataFrame(rdd1, ...) равен pyspark.sql.dataframe.DataFrame, после применения .collect() это простой Python list, а в списках не указан метод dropDuplicates. То, что вы хотите что-то вроде этого:

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

df1.collect() 
+0

ОК, это имеет смысл сейчас. – Jared

0

, если у вас есть кадр данных и хотите, чтобы удалить все дубликаты - со ссылкой на дубликаты в определенном столбце (называется «ColName»):

количества до того дедупликации:

df.count() 

сделать Dedupe (преобразовать столбец вы ДЭ-озвучивание для строкового типа):

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

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

может использовать отсортированную группу для проверки того, что дубликаты были удалены:

df.groupBy('colName').count().toPandas().set_index("count").sort_index(ascending=False)