본문 바로가기

공부/빅데이터와 머신러닝 소프트웨어 (K-MOOC)

3주차. 빅데이터 배치 분석 및 대화형 질의

반응형

빅데이터 배치 분석 및 대화형 질의

3-1. 배치분석

  • Batch 분석
    • 많은 데이터를 큰 단위로 분석하는 분석 방법 ex) ETL
    • RDD operation 통해서 표현 가능
  • RDD operation 통해서 표현하기
    • RDD 생성
      • 병렬화된 컬렉션 생성 - 기존언어를 병렬 collection, Paralleize하면 RDD 형태로 변환
      • 실제로 아주 큰 데이터를 분산파일 시스템에 저장할때는 다음방법
      • 데이터 파일들 위치를 textFile이라는 함수에 주면 데이터를 읽어서 RDD 형성
    • RDD 변환
      • Map 변환 : 각각의 원소에 함수를 적용해서 결과 만들어내서 RDD 생성
      • flatMap에 넘겨진 함수 적용
      • filter : RDD서 포함된 element중 조건을 만족하는 것만 넘겨줌
  • Map & flattenMap
    • Map 변환시에는 tokenize
      • 해당하는 string을 받아서 스페이스 인식후 word를 따로 끄집어냄
      • RDD의 각각의 원소가 리스트가 됨( 원소 인식)
    • flatMap 역시 tokenize
      • list의 컬렉션이 아닌 string의 컬렉션 형태로 나옴
      • 리스트 안에 있는 것들을 다 꺼내서 반영 ( 그냥 나옴)
  • Pair RDD
    • join() - join은 두개의 RDD가 있을때 같은 key를 같는 element 들을 모아 그룹핑
    • reduceByKey() - 각가의 키에 대해서 데이터를 모으는 과정
    • 변환
      • reduceByKey()
      • groupByKey() - 같은 키를 갖는 값들을 모으는 것
      • keys - key들만 모아서 RDD 만들고 return
      • values - value에 해당하는 부분만 모아서 반환
      • sortByKey - 정렬후 돌려줌
      • join
  • Action
    • Spark가 결과를 만들어내도록 trigger하는 operation
    • collect
      • RDD의 원소를 다 모아서 master에 해당하는 Action에 돌려줌
      • count
      • first - 첫번재 원소
      • take(n) - 처음 n개 반환
    • save
      • saveAsTextFile
      • saveAsSequenceFile
  • Persistence
    • rdd.persist() - 계산결과 저장시 쓸수 있음 저장되어 있는 rdd 사용할 수 있음
    • 각각의 load는 RDD의 특정 부분을 메모리에 저장, 그후에 RDD 부분을 사용
    • 손상시에는 lineage를 통해 자동적으로 재계산

3-2. 대화형 질의

  • 대화형
    • 구조화된 데이터에서 사용
    • SQL - 관계형 모델로 표현됐을 때 사용하는 도메인 특화된 언어
    • talbe 형태 - col이 데이터 종류
  • operation
    • projection : 보고싶은 col만 볼 수 있음
    • Selection : 특정 조건을 만족하는 row들만 뽑아서 그 결과를 볼 수 있음
    • Aggregation : 하나의 col에서 데이터 통계를 보고싶을 때 사용
    • Join : 두개의 테이블을 같이 보고싶을때
      • natural join : 두 테이블에 해당하는 col 값 있어야함
      • left : 왼쪽에 해당하는 col 존재해야함
      • right : 오른쪽에 해당하는 col 존재해야함
  • Spark SQL
    • DataFrame : 데이터가 여러 row 이름을 가진 col 있음
    • SQL질의를 Spark 가 이행하는 RDD 변환으로 바꿔서 수행
    • API
      • df.show 하면 내부정보중에 일정부분을 standard out으로 보여줌
    • Operation
      • select()
      • filter()
      • groupBy()
    • 관계형 데이터 베이스에서 전통적인 SQL 실행
    • df.createOrReplaceTempView("이름") - 등록하기
    • spark.sql() - 이걸로 SQL 쿼리문 작성 가능

Quiz

Quiz_1

빅데이터 배치 분석은 실시간으로 들어오는 데이터를 빠르게 분석하여 계속해서 실시간으로 결과를 내는 분석 방법이다.

O

X 정답

해설)

정답은 x입니다. 빅데이터 배치 분석은 고정되어 있는 데이터를 분석하여 결과를 내는 분석 방법이다. 새로운 분석 job이 수행될 때마다 새로운 결과가 나온다.

Quiz_2

rdd = sc.parallelize([1, 2, 3, 4])
mappedRDD = rdd.map(lambda x: x*2)
filteredRDD = mappedRDD.filter(lambda x: x % 2 == 0)
위 프로그램을 수행하고 collect action을 수행하면 그 결과로 돌아오는 값은?

1, 2, 3, 4

2, 4, 6, 8 정답

2, 4

6, 8

해설)

정답은 2번입니다. rdd는 {1, 2, 3, 4}, mappedRDD는 각 수에 2를 곱해서 새로운 결과를 얻어 {2, 4, 6, 8}이 되고, 마지막으로 filteredRDD는 짝수만 선택하는 것이라 전체를 다 선택하여 {2, 4, 6, 8}이 된다.

Quiz_3

data = sc.textFile(“hdfs://data/logs”)
counts = data.flatMap(lambda line: line.split(“ “)).map(lambda word: (word, 1)).____
counts.saveAsTextFile(“hdfs://results/counts”)
위의 application은 스파크에서 word count를 구현한 것이다. 밑줄 친 부분에 들어가야 할 코드를 고르시오.

groupByKey()

reduce(lambda a, b: a + b)

reduceByKey(lambda a, b: a + b) 정답

count()

해설)

정답은 3번입니다. 각 word를 key로 해서 해당 word별로 reduce를 수행하는 reduceByKey를 사용해야 하고 주어야 하는 함수는 두 count 값을 합하여 합한 count값을 반환하는 함수여야 한다.

Quiz_4

관계형 오퍼레이션에 대한 설명 중 틀린 것을 고르시오

Selection: 특정 Predicate을 만족하는 행을 선택한다.

Join: 두 개의 완전히 동일한 컬럼 구조를 가진 테이블을 합친다. 정답

Projection: 테이블에서 특정한 열만을 선택한다.

Aggregation: 특정한 열에 대해 count, sum등의 연산을 이용하여 데이터를 합친다.

해설)

정답은 2번입니다. Join은 두 테이블 중 같은 열의 이름을 가진 부분이 있는 경우 합쳐서 분석할 수 있다.

반응형