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