IT/Spark

Spark - Structured Data

물통꿀꿀이 2020. 2. 6. 21:55


위의 그림에서 언급하고 있는 스펙트럼을 보면, Structured, Semi-Structured, Unstructured를 차이를 대략 알 수 있다.

한국말로 풀이해보면 구조화, 반구조화, 비구조화로 구분할 수 있는데 왜 갑자기 이와 같은 것을 언급하는 것일까?


이제까지 다룬 RDD는 구조화된 데이터가 아니다. 구조화된 데이터라면 작업이 될 때, 데이터 구조가 어떤 식으로 변하는지 혹은 데이터가 어떻게 변경되었는지 알 수 있어야하는데 이미 알다시피 RDD의 작업은 결과를 알기 전까지 내부를 알 수가 없다. 물론, RDD[클래스 이름]과 같이 사용하면서 대략적으로 데이터 구조는 파악 할 수 있지만, 역시나 내부 데이터를 알 수가 없다.

(일반 자료형을 사용하는 RDD는 Regular RDD, 클래스를 사용하는 RDD는 Arbitary RDD라 한다.)


이와 같이 내부 데이터를 알지 못하기 때문에 발생하는 문제점은 사실 명확하다. 

작업 중인 데이터를 분석할 수 없기 때문에 결과를 봐야 알 수 있다. 아래 예시를 확인해보자.

1) join 

2) filter

3) count

1) filter

2) join

3) count 

1) cartesian

2) filter

3) filter

4) count 

위의 표의 결과가 같다고 할 때, 성능은 압도적으로 2번째 부분이 낫다. 즉, RDD Transformation 메소드의 순서를 어떻게, 데이터 갯수 최소화 등등에 따라 성능이 많이 달라질 수 있다.


그런데 이런 모호성을 해소 할 수 있는 것이 구조화된 데이터를 사용하는 것이다.


위의 그림이 구조화된 데이터이다. (데이터베이스의 테이블과 구조가 흡사하여 많이 익숙할 수도 있다.) 

즉, 이렇게 구조화가 되어 있으면 원하는 데이터만 가져올 수도 있고 중간 중간 데이터의 흐름도 확인 할 수 있어 분석하기에 용이하다. 


정리해보면 RDD와 같은 구조화 되지 않은 데이터는 대부분의 것을 사용자가 직접 수행해야 하기 때문에 최적화하기가 어렵다. (최적화 할 수 있는 여지도 많지 않다.) 반면에 구조화된 데이터는 최적화가 좀 더 수월하다. 

때문에 Spark는 RDD 외에도 구조화된 데이터를 다룰 수 있는 SparkSQL 제공한다.


Ref

http://x-wei.github.io/sparkmooc_note_lec5.html