1. SparkConf와 SparkContext를 생성합니다. 2. 데이터를 읽어 들입니다. 3. 평점을 추출합니다. 4. 평점을 세어 봅니다. 5. 결과를 정렬합니다. 6. 결과를 출력합니다. 결론 Spark는 RDD를 사용하여 데이터를 처리합니다. RDD는 분산된 데이터 세트이며, Spark는 RDD를 사용하여 병렬로 작업을 수행할 수 있습니다. `
Spark의 작동 원리 > Spark의 핵심은 Resilient Distributed Dataset (RDD) -> 복구 가능한 분산 데이터 셋 RDD 다양한 데이터 세트를 추상화 한 것. > RDD는 분산되고 변형하는 성질을 갖고 있어 여러 클러스터에 나눌 수 있고 개인 컴퓨터에서도 작동 가능. 클러스터의 특정 노드에 이상이 생겨도 자동으로 처리, 노드 하나가 작동을 멈춰도 계속 작동하면서 작업을 재분배. RDD는 큰 데이터 셋 -> 한 데이터를 다른 데이터로 변환하는데 쓰임 Spark context -> sc sc객체를 사용해서 RDD를 생성 할 수 있음. RDD 변형 map -> 데이터를 불러와 다른 데이터로 변형. 기존 RDD의 모든 엔트리가 새 RDD의 새로운 값으로 변형 flatmap -> map과 비슷한 기능을 수행, 단 새로 생성된 RDD가 기존 RDD보다 크거나 작을 수 있음. filter -> RDD에 있
이전 포스팅에서는 lichess에서 제공한 체스 오프닝 데이터를 간단하게 전처리 했다. 이번엔 본격적으로 우리가 데이터베이스에 저장할 포맷으로 전처리를 진행한다. 데이터 구조 데이터를 전처리하기전에 어떤식으로 구조를 짜야 쿼리를 쉽고 빠르게 할 수 있을지에 대해서 고민을 해보다 2가지 선택지를 생각했다. double linked list hash table 결론부터 말하자면 hash table (dict)의 구조를 채용하여 전처리 하기로 하였다. double linked list의 구조도 역시 활용할만 하였으나 여러 예외처리들과 오프닝 데이터를 쿼리를 할 때 특정 오프닝의 이름을 알기 위해서 끝까지 탐색해야 한다는 점이 비효율적이라고 생각했다. 체스 기보를 나타내는 방식엔 pgn방식과 uci방식이 있는데 후에 stockfish를 활용하기 위하여 stockfish와 호환이 잘되는 uci방식으로 데이터를 저장한다. > 스톡피시는 꽤 오랜 기간동안 사용된 대중
이번 프로젝트의 구성은 Stockfish를 활용하여 Chess engine과의 대결을 할 수 있는 사이트와, chess 기보를 읽어들이는 data pipeline, 그 데이터를 저장하는 data warehouse를 구성하는 것이 목표. Why Chess? 평소 체스와 바둑 장기 등 여러 보드게임을 즐겨하는 중에 체스에 대한 매력을 느껴 여러 사이트를 전전하던 중 사람들과 대결한 기보를 체스 엔진에다가 분석을 맡기는 기능을 유료로 서비스하는 사이트들이 많았다. 물론 lichess같이 무료로 모든 것을 제공하는 사이트도 있지만, datapipeline을 구축해보고 엄청난 data(약 1.2TB)를 다뤄볼 수 있다는게 엄청난 매력 아닌가. 이번 프로젝트를 통해 대용량 데이터를 관계형 데이터베이스(MYSQL, POSTGRESSQL)과 NoSQL(MongoDB, HBASE)를 활용해서 대용량 데이터베이스에서 빠른 쿼리 응답을 수행할 수 있도록 하는 것으로 목표를 잡았다. (이