web-dev-qa-db-fra.com

PySpark distinct (). Count () sur un fichier csv

Je suis nouveau pour susciter et j'essaie de faire un distinct (). Count () basé sur certains champs d'un fichier CSV.

Structure CSV (sans en-tête):

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

pour charger .csv j'ai tapé:

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

puis un décompte distinct sur lines a renvoyé 3 comme prévu:

lines.distinct().count()

Mais je ne sais pas comment faire un décompte distinct basé sur: disons id et country.

6
dimzak

Dans ce cas, sélectionnez les colonnes à prendre en compte, puis comptez:

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

Pour plus de clarté, vous pouvez optimiser le lambda pour éviter d'appeler line.split à deux reprises.

7
elyase

La ligne de séparation peut être optimisée comme suit:

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