2015-01-16 18 views
6

Sono nuovo per accendere e sto cercando di creare un(). Count() basato su alcuni campi di un file csv.PySpark distinct(). Count() su un file csv

struttura Csv (senza intestazione):

id,country,type 
01,AU,s1 
02,AU,s2 
03,GR,s2 
03,GR,s2 

per caricare .csv I digitato:

lines = sc.textFile("test.txt") 

poi un conteggio distinto sul lines restituito 3 come previsto:

lines.distinct().count() 

Ma non ho idea di come fare un conteggio distinto basato su diciamo id e country.

risposta

6

In questo caso è necessario selezionare le colonne che si desidera prendere in considerazione, e poi contare:

sc.textFile("test.txt")\ 
    .map(lambda line: (line.split(',')[0], line.split(',')[1]))\ 
    .distinct()\ 
    .count() 

Questo è per la chiarezza, è possibile ottimizzare la lambda per evitare di chiamare line.split due volte.

2

La linea di divisione può essere ottimizzata come segue:

sc.textFile("test.txt").map(lambda line: line.split(",")[:-1]).distinct().count()