티스토리 뷰

이전 글에서 사용했던 여러 함수들을 사용해 간단한 예제 텍스트 파일을 HDFS에서 불러와 wordcount를 직접 해보겠습니다. 먼저 아래 링크에서 sample.txt 파일을 가상머신 내부에 설치해줍니다.

 

파일 링크

http://ailab.ssu.ac.kr/rb/?c=8/29&cat=2016_1_%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B6%84%EC%82%B0%EC%BB%B4%ED%93%A8%ED%8C%85&uid=797

 

A.I Lab - Spark #1 강의자료

관리자 | 2016.05.09 | 조회 591

ailab.ssu.ac.kr

 

 

sample.txt 파일이 있는 Downloads 디렉터리로 들어가서 파일을 HDFS에 put 해줍니다.

 

이제 pyspark 쉘에 들어가서 해당 파일을 RDD로 생성해줍니다.

이전 글들에서 생성했던 RDD는 모두 파이썬 데이터 타입에 대한 데이터였지만 파일을 RDD로 생성하기 위해서는 sc.textFile을 통해 파일을 read합니다. 이때 HDFS의 home 경로를 기준으로 해당 파일에 대한 알맞은 경로를 입력해줍니다.

생성한 RDD를 map을 사용해 각 단어마다 split 해주는 lambda 함수로 모든 단어를 분리해줍니다.

하지만 map을 사용하면 아래와 같이 각 라인마다 리스트로 만들어집니다. 

 

모든 단어들을 하나의 리스트안에 넣기위해 flatMap을 사용합니다. 아래와 같이 텍스트 파일에 있는 모든 단어들이 분리되어 하나의 리스트에 있는 것을 확인할 수 있습니다.

위에서 만들었던 RDD에서 모든 단어를 key로하고 value는 모두 1을 가질 수 있도록 먼저 map을 해준 뒤 동일한 단어들 끼리 병합될 수 있도록 reduceByKey를 사용해줍니다. 이때 value인 1을 더해주면 동일한 단어들이 병합될 때마다 카운트가 됩니다. 여기서 I, out은 2개 the는 5개 나머지 단어는 모두 1개씩 있다는 것을 볼 수 있습니다.

이제 reduceByKey로 병합된 데이터를 오름차순으로 출력해봅니다. 정렬은 sortByKey를 사용하고 ascending=True로 입력하면 오름차순으로 정렬해줍니다. 하지만 정렬을 value를 기준으로 해서 아래와 같이 단어를 기준으로 정렬이 된 모습입니다.

단어가 아닌 숫자를 기준으로 정렬하기 위해 map을 사용해 key와 value의 위치를 바꿔주고 다시 오름차순 정렬해 출력해보면 아래와 같이 카운트 숫자를 기준으로 출력된 모습을 확인할 수 있습니다.

ascending=False로 입력하면 내림차순으로 정렬된 결과를 볼 수 있습니다.