2015-06-26 5 views
5

Ben yerel olarak pyspark 1.4 içinde dataframes ile uğraşıyorum ve sorunları çözmek için çift kopyalar yöntemi alma sorunları yaşıyorum. "AttributeError: 'listesindeki' nesnenin özniteliği yoktur 'dropDuplicates'" hatasını döndürmeye devam eder. Neden tam olarak emin değilim neden latest documentation sözdizimini takip ediyor gibi. Bu işlevsellik veya bir şey için bir ithalatı kaçırıyormuşum gibi görünüyor.pyspark içinde bir veri çerçevesinden çiftleri kaldırmak

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

cevap

8

Bu bir ithalat sorunu değil. Yanlış bir nesnede .dropDuplicates()'u arayın. sqlContext.createDataFrame(rdd1, ...) sınıfı pyspark.sql.dataframe.DataFrame ise, .collect() uyguladıktan sonra düz bir Python list ve listeler dropDuplicates yöntemini sağlamaz. Ne istiyorsun böyle bir şeydir:

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

df1.collect() 
+0

Tamam, bu şimdi mantıklı. – Jared

0

bir veri çerçevesi ve tüm çiftleri kaldırmak istiyorsanız - referansla yinelenenlere belirli sütunda (sözde 'colName'):

sayımı önce tekilleştirme:

df.count() 

dedupe yapmak (eğer dize tipine-duping giderilirse olan sütunu dönüştürmek):

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

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

, kopyaların kaldırıldığını görmek için sıralı bir groupby kullanabilir:

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