프로그래밍/Data process

[Spark] 파일 읽어 RDD 객체 만들기 및 값 확인해보기

Dibrary 2022. 5. 9. 09:50
반응형

안녕하세요 Dibrary입니다.

Spark를 설치 완료 하셨다면, 이후 데이터 파일을 불러와서 간단한 확인을 해 보겠습니다.

 


먼저 cmd로 spark-shell을 실행 해 줍니다.

 

간단하게 임의의 데이터를 만들었습니다.

굳이 순서대로 하지 않아도 되는데, 갯수를 알기 쉽게 이렇게 작성했습니다.
11은 4개, 17은 8개, 15는 6개, 13은 2개, 2는 10개죠.

 

파일 읽어오기 = sc.textFile

textFile을 사용하면 파일을 읽어올 수 있습니다. 저는 경로가 다른 곳에 넣어두었기 때문에, 절대경로를 입력했습니다.

파일을 읽어서 values라는 객체에 담았고, 해당 객체는 RDD[String] 임을 알 수 있습니다.

 

RDD는 Spark에서 다루는 기본 추상화 객체입니다.

특징으로는

  • 불변성 - 읽기 전용
  • 복원성 - 장애 내성
  • 분산 - 여러 곳에 저장

의 특징을 가지고 있습니다.

 

내부 데이터는 String으로 RDD가 구성되어 있다는 의미죠.

 

과연 읽어온 데이터가 맞는지 확인 해 볼까요?

count를 사용하면 줄의 갯수를 확인할 수 있습니다.

아까 메모장에 작성한 내용이 5줄이었으니 맞게 나옵니다.

 

 

String 객체 확인하기 = foreach

foreach를 사용하면 읽어온 객체를 확인할 수 있습니다. 

 

네 메모장의 내용과 똑같죠?

 

 

그럼 좀 더 특별하게 정해진 값을 찾아보는 명령어를 보겠습니다.

각 요소를 전달해 필터링 할 수 있는 함수 = filter

filter 함수를 사용해서 2가 포함된 경우만 가져왔습니다. 

주의할 점은, 제가 데이터를 2,2,2,2, 이렇게 작성 해 두었기 때문에 필터로 찾아온 데이터의 줄 수는 1개 입니다.

혼동하시면 안됩니다.

 

 

새로운 RDD 생성하기 = map 함수

temp라는 변수에서 콤마를 기준으로 잘라서 새로운 RDD를 만들었습니다. 이 새RDD의 이름은 single_values

이 객체는 count를 해도 한 줄이라고 나옵니다. 과연 filter를 한 결과와 똑같을까요?

 

배열 확인하기 = collect 함수

collect를 써보니 Array라고 나옵니다. filter와는 결과가 다르네요.

또 map으로 나온 객체를 foreach로 확인해보려 하면? 아래와 같이 알 수 없는 글자가 나옵니다.

 

이는 데이터가 배열 안에 위치해 있기 때문입니다.

 

그러면 데이터를 collect 말고 foreach를 써서 볼 수는 없는걸까요?

아닙니다. 데이터를 '변형'해서 다루면 됩니다.

 

collect에서 head 데이터만 꺼내어서 temp라는 변수에 담았습니다.
이 데이터는 Array안에 Array가 들어있는게 아닌 것을 확인하실 수 있습니다.

 

따라서 foreach를 사용하니 값들이 낱개로 출력이 잘 되는 것을 확인하실 수 있습니다.

728x90
반응형