私は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()
しかし、id
とcountry
のように基づいて明確なカウントを行う方法がわかりません。
この場合、検討する列を選択してから、次のようにカウントします。
sc.textFile("test.txt")\
.map(lambda line: (line.split(',')[0], line.split(',')[1]))\
.distinct()\
.count()
これはわかりやすくするために、ラムダを最適化してline.split
を2回呼び出さないようにすることができます。
分割線は次のように最適化できます。
sc.textFile("test.txt").map(lambda line: line.split(",")[:-1]).distinct().count()