[PySpark] 액션 –

Thomas Dramab과 Denny Lee의 “Learning PySpark”를 보면서 학습 과정을 기록한 기록입니다♪


.count(…) 함수

– 항목 수를 계산

>>> data_reduce = sc.parallelize((1, 2, .5, .1, 5, .2), 3)
>>> data_reduce.count()
6

→ 6개 이상의 요소수에 따라 출력

.saveAsTextFile(…) 함수

– RDD를 텍스트 파일로 저장

– 별도의 파일에 각 파티션!

>>> data_key = sc.parallelize(
...     (('a', 4), ('b', 3), ('c', 2), ('a', 8), ('d', 2), ('b', 1), ('d', 3)), 4)
>>> data_key.saveAsTextFile('/Users/hayeon/Downloads/data_key.txt')


* _SUCCESS : 내용이 없는 파일로 성공적으로 저장되었음을 나타냄

* part-00000: (‘a’, 4), data_key의 첫 번째 파티션 값

* part-00001: data_key의 두 번째 파티션 값 (‘b’, 3), (‘c’, 2)

* part-00002: (‘a’, 8), (‘d’, 2), data_key의 세 번째 파티션 값

* part-00003: data_key의 4번째 파티션 값 (‘b’, 1), (‘d’, 3)

– 각 행은 문자열로 표현되므로 거꾸로 읽으려면 역방향으로 파싱해야 합니다.

>>> def parseInput(row):
...     import re
...     pattern = re.compile(r'\(\'((a-z))\', ((0-9))\)')
...     row_split = pattern.split(row)
...     return (row_split(1), int(row_split(2)))
>>> data_key_reread = sc.textFile('/Users/hayeon/Downloads/data_key.txt').map(parseInput)
>>> data_key_reread.collect()
(('a', 8), ('d', 2), ('b', 1), ('d', 3), ('b', 3), ('c', 2), ('a', 4))

.foreach(…) 함수

– RDD의 각 요소에 동일한 기능을 반복 적용

– .map() 함수와 달리 정의된 함수가 모든 데이터에 개별적으로 적용됨

– PySpark에서 지원하지 않는 DB에 데이터를 저장하려는 경우에 유용합니다.

ex) data_key RDD에 저장된 모든 데이터 출력

>>> def f(x):
...     print(x)

→ 간단한 데이터 출력 함수 생성

>>> data_key.foreach(f)
('a', 8)
('d', 2)
('b', 3)
('c', 2)
('b', 1)
('d', 3)
('a', 4)

→ 함수 f를 각 요소에 적용한 결과 한 줄씩 출력되는 것을 볼 수 있습니다!