web-dev-qa-db-ja.com

csvファイルのPySparkdistinct()。count()

私はsparkに不慣れで、csvファイルのいくつかのフィールドに基づいてdistinct()。count()を作成しようとしています。

Csv構造(ヘッダーなし):

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

入力した.csvを読み込むには:

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

次に、linesの個別のカウントは、期待どおりに3を返しました。

lines.distinct().count()

しかし、idcountryのように基づいて明確なカウントを行う方法がわかりません。

7
dimzak

この場合、検討する列を選択してから、次のようにカウントします。

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

これはわかりやすくするために、ラムダを最適化してline.splitを2回呼び出さないようにすることができます。

8
elyase

分割線は次のように最適化できます。

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