2015-06-26 25 views
5

Ich bin mit Datenrahmen in Pyspark 1.4 vor Ort herumspielen und habe Probleme, die Drop-Duplikate-Methode zu arbeiten. Liefert den Fehler "AttributeError: 'list' Objekt hat kein Attribut 'dropDuplicates'". Nicht ganz sicher, warum, wie ich zu sein scheinen, die Syntax in der latest documentation zu folgen. Scheint, als ob ich einen Import für diese Funktionalität oder etwas vermisse.entfernen Duplikate aus einem Datenrahmen in 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() 

Antwort

8

Es ist kein Importproblem. Sie rufen einfach .dropDuplicates() auf ein falsches Objekt. Während Klasse sqlContext.createDataFrame(rdd1, ...) ist pyspark.sql.dataframe.DataFrame, nachdem Sie .collect() anwenden, ist es eine einfache Python list, und Listen bieten keine dropDuplicates Methode. Was Sie wollen, ist so etwas wie dieses:

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

df1.collect() 
+0

ok, das macht jetzt Sinn. – Jared

0

, wenn Sie einen Datenrahmen und wollen alle Duplikate entfernen - mit Bezug auf die Duplikate in einer bestimmten Spalte (so genannte ‚colName‘):

Zählung vor dedupe:

df.count() 

die dedupe tun (konvertieren Sie die Spalte, die Sie auf String-Typ Deduplizierung):

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

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

kann eine sortierte groupby verwenden, um zu überprüfen, dass Duplikate entfernt worden sind:

Verwandte Themen