실시간 빅데이터 처리를 위한 Spark & Flink Online 7) 정형 vs 비정형 데이터

Bradley·2022년 4월 12일
0

Structured vs Unstructured

데이터를 합치고 추출하기

미국의 $2000불 이상의 주식만 가져오기
가능한 방법은 몇가지일까?

첫번째로 생각해볼 수 있는
1. Inner Join
2. Filter by Country
3. Filter by Currency

tickers = sc.parallelize([
(1, ("Google", "GOOGL", "USA")),
(2, ("Netflix", "NFLX", "USA")),
(3, ("Amazon", "AMZN", "USA")),
(4, ("Tesla", "TSLA", "USA")),
(5, ("Samsung", "005930", "Korea")),
(6, ("Kakao", "035720", "Korea"))
])

prices = sc.parallelize([
(1, (2984, "USD")), (2, (645, "USD")),
(3, (3518, "USD")), (4, (1222, "USD")),
(5, (70600, "KRW")), (6, (125000, "KRW"))
])
# CASE 1: Join 먼저, filter 나중에
tickerPrice = tickers.join(prices)
tickerPrice.filter(lambda x: x[1][0][2] == "USA" and x[1][1][0] > 2000).collect()
# [(1, (('Google', 'GOOGL', 'USA'), (2984, 'USD'))), (3, ('Amazon', 'AMZN', 'USA'), (3518, 'USD')))]

# CASE 2: filter 먼저, join 나중에
filteredTicker = tickers.filter(lambda x:x[1][2] == "USA")
filteredPrice = prices.filter(lambda x:x[1][0] > 2000)
filteredTicker.join(filteredPrice).collect()
# [(1, (('Google', 'GOOGL', 'USA'), (2984, 'USD'))), (3, ('Amazon', 'AMZN', 'USA'), (3518, 'USD')))]

퍼포먼스는 CASE 2가 더 좋다 -> shuffling을 최소화함

매번 이런 고민을 꼭 해야할까?
스파크가 알아서 해주면 좋겠다

데이터가 구조화 되어있다면
자동으로 최적화가 가능
하다

구조화된 데이터란?

Unstructured: free form

  • 로그 파일
  • 이미지
    Semi Structured: 행과 열
  • CSV
  • JSON
  • XML
    Structured; 행과열 + 데이터 타입 (스키마)
  • 데이터베이스

Sturcutured Data vs RDDs

RDD에선

  • 데이터의 구조를 모르기 때문에 데이터를 다루는 것을 개발자에게 의존
  • Map, flatMap, filter등을 통해 유저가 만든 function을 수행

Structured Data 에선

  • 데이터의 구조를 이미 알고있으므로 어떤 테스크를 수행할것인지 정의만 하면 됨
  • 최적화도 자동으로 할 수 있음!

구조화된 데이터를 다루는 Spark SQL

Spark SQL은 구조화된 데이터를 다룰 수 있게 해준다

  • 유저가 일일이 function을 정의하는 일 없이 작업을 수행할 수 있다
  • 자동으로 연산이 최적화 된다!
profile
2022년부턴 후회없이

0개의 댓글

관련 채용 정보