2015-06-26 17 views
5

Sto lavorando con i dataframe in pyspark 1.4 localmente e sto riscontrando problemi nel far funzionare il metodo dei duplicati di rilascio. Continua a restituire l'errore "AttributeError: 'list' object non ha attributo 'dropDuplicates'". Non sono sicuro del perché, come sembra, sto seguendo la sintassi nello latest documentation. Sembra che manchi un'importazione per quella funzionalità o qualcosa del genere.rimuovere i duplicati da un dataframe 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() 

risposta

8

Non è un problema di importazione. Basta chiamare .dropDuplicates() su un oggetto sbagliato. Mentre la classe di sqlContext.createDataFrame(rdd1, ...) è pyspark.sql.dataframe.DataFrame, dopo aver applicato .collect() è un semplice Python list e gli elenchi non forniscono il metodo dropDuplicates. Ciò che si vuole è qualcosa di simile:

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

df1.collect() 
+0

ok, questo ha senso ora. – Jared

0

se si dispone di una struttura di dati e si desidera rimuovere tutti i duplicati - con riferimento ai duplicati in una colonna specifica (chiamata 'colName'):

conteggio prima deduplicazione:

df.count() 

fare la deduplicazione (convertire la colonna che si sta de-beffa di tipo stringa):

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

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

può utilizzare un gruppo ordinato per verificare che i duplicati siano stati rimossi:

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