web-dev-qa-db-fra.com

supprimer les doublons d'une trame de données dans pyspark

Je déconne avec les cadres de données dans pyspark 1.4 localement et j'ai des problèmes pour que la méthode de suppression des doublons fonctionne. Continue de renvoyer l'erreur "AttributeError: l'objet 'list' n'a pas d'attribut 'dropDuplicates'". Je ne sais pas trop pourquoi, comme je semble suivre la syntaxe dans le dernière documentation . On dirait que je manque une importation pour cette fonctionnalité ou quelque chose.

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

Ce n'est pas un problème d'importation. Vous appelez simplement .dropDuplicates() sur un mauvais objet. Alors que la classe de sqlContext.createDataFrame(rdd1, ...) est pyspark.sql.dataframe.DataFrame, Après avoir appliqué .collect() c'est un simple Python list, et les listes ne fournissent pas la méthode dropDuplicates. Ce que vous voulez est quelque chose comme ceci:

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

 df1.collect()
25
zero323

si vous avez un bloc de données et que vous souhaitez supprimer tous les doublons - en référence aux doublons dans une colonne spécifique (appelée 'colName'):

compter avant déduplication:

df.count()

faites la déduplication (convertissez la colonne que vous déduprimez en type chaîne):

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

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

peut utiliser un groupe trié pour vérifier que les doublons ont été supprimés:

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