린아저씨의 잡학사전

Transforming Data Using RDDs

1.weblog 데이터를 RDD로 만든다

logRDD = sc.textFile("/loudacre/weblogs/")

2.logRDD 에서 JPG 파일에 대한 요청만 필터링한다.


jpglogsRDD = logRDD.filter(lambda line: ".jpg" in line)

3.take action을 이용해서 jpglogsRDD에서 데이터 다섯줄만 반환한다.


jpgLines = jpglogsRDD.take(5)

4.반복문으로 jpgLines를 출력한다.


for line in jpgLines: print line


217.150.149.167 - 4712 [15/Sep/2013:23:56:06 +0100] "GET /ronin_s4.jpg HTTP/1.0" 200 5552 "http://www.loudacre.com" "Loudacre Mobile Browser MeeToo 1.0"
104.184.210.93 - 28402 [15/Sep/2013:23:42:53 +0100] "GET /titanic_2200.jpg HTTP/1.0" 200 19466 "http://www.loudacre.com" "Loudacre Mobile Browser MeeToo 2.0"
37.91.137.134 - 36171 [15/Sep/2013:23:39:33 +0100] "GET /ronin_novelty_note_3.jpg HTTP/1.0" 200 7432 "http://www.loudacre.com" "Loudacre Mobile Browser iFruit 3"
177.43.223.203 - 90653 [15/Sep/2013:23:31:17 +0100] "GET /ifruit_3.jpg HTTP/1.0" 200 19578 "http://www.loudacre.com" "Loudacre Mobile Browser Sorrento F31L"
19.250.65.76 - 44388 [15/Sep/2013:23:31:10 +0100] "GET /sorrento_f24l.jpg HTTP/1.0" 200 5730 "http://www.loudacre.com" "Loudacre Mobile Browser iFruit 3A"

5.map을 사용해서 새로운 RDD를 만든다. logsRDD의 각 라인의 길이를 값으로 같는 RDD를 생성한다.


lineLengthsRDD = logRDD.map(lambda line: len(line))

6.반복문을 사용하여 5개를 출력한다.


for line in lineLengthsRDD.take(5):print line


151
143
154
147
160

7.단순히 라인의 길이만 계산한 RDD는 유용하지 않다. 대신에 map을 사용하여 logRDD를 공백으로 구분한 RDD를 생성한다.


lineFieldsRDD = logRDD.map(lambda line: line.split(' '))

8.lineFieldsRDD의 처음 5개 요소를 반환한다. 이 결과는 list of string이다.


lineFields = lineFieldsRDD.take(5)

9.반복문으로 출력한다.


for fields in lineFields:
   print "-----------"
   for field in fields:print field

-----------
3.94.78.5
-
69827
[15/Sep/2013:23:58:36
+0100]
"GET
/KBDOC-00033.html
HTTP/1.0"
200
14417
"http://www.loudacre.com"

"Loudacre
Mobile
Browser
iFruit
1"
-----------
3.94.78.5
-
69827
[15/Sep/2013:23:58:36
+0100]
"GET
/theme.css
HTTP/1.0"
200
3576
"http://www.loudacre.com"

"Loudacre
Mobile
Browser
iFruit
1"
-----------
19.38.140.62
-
21475
[15/Sep/2013:23:58:34
+0100]
"GET
/KBDOC-00277.html
HTTP/1.0"
200
15517
"http://www.loudacre.com"

"Loudacre
Mobile
Browser
Ronin
S1"
-----------
19.38.140.62
-
21475
[15/Sep/2013:23:58:34
+0100]
"GET
/theme.css
HTTP/1.0"
200
13353
"http://www.loudacre.com"

"Loudacre
Mobile
Browser
Ronin
S1"
-----------
129.133.56.105
-
2489
[15/Sep/2013:23:58:34
+0100]
"GET
/KBDOC-00033.html
HTTP/1.0"
200
10590
"http://www.loudacre.com"

"Loudacre
Mobile
Browser
Sorrento
F00L"

10.이번에는 IP 주소만 있는 새로운 RDD를 만든다.


ipsRDD = logRDD.map(lambda line: line.split(' ')[0])

11.IP를 출력한다.


for ip in ipsRDD.take(5):print ip


3.94.78.5
3.94.78.5
19.38.140.62
19.38.140.62
129.133.56.105

12.ipsRDD를 HDFS에 저장한다.

공유하기

facebook twitter kakaoTalk kakaostory naver band