{"id":25134957,"url":"https://github.com/seilylook/spark_core_experiments","last_synced_at":"2026-05-02T04:40:28.734Z","repository":{"id":275561152,"uuid":"925118245","full_name":"seilylook/Spark_Core_Experiments","owner":"seilylook","description":"Experiments: Spark Core","archived":false,"fork":false,"pushed_at":"2025-02-03T09:36:31.000Z","size":60,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-03T02:14:40.809Z","etag":null,"topics":["makefile","poetry","pyenv","pytest","spark","unittest"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/seilylook.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-31T09:09:32.000Z","updated_at":"2025-02-03T09:36:34.000Z","dependencies_parsed_at":"2025-02-03T10:32:22.657Z","dependency_job_id":"08e52dcc-5642-4ca7-a42a-4344b77bfb30","html_url":"https://github.com/seilylook/Spark_Core_Experiments","commit_stats":null,"previous_names":["seilylook/spark_core_experiments"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seilylook%2FSpark_Core_Experiments","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seilylook%2FSpark_Core_Experiments/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seilylook%2FSpark_Core_Experiments/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seilylook%2FSpark_Core_Experiments/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/seilylook","download_url":"https://codeload.github.com/seilylook/Spark_Core_Experiments/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246922246,"owners_count":20855345,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["makefile","poetry","pyenv","pytest","spark","unittest"],"created_at":"2025-02-08T16:17:08.145Z","updated_at":"2026-05-02T04:40:28.629Z","avatar_url":"https://github.com/seilylook.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 1. 분산 데이터 처리의 강점 체험\nSpark는 대규모 데이터를 병렬 처리할 수 있는 프레임워크야. 이를 제대로 느끼려면 데이터 크기와 분산 환경에서의 차이를 체험해야 해.\n\n실습 아이디어:\n\n- 단일 머신 vs. 클러스터:\n1. 작은 데이터셋을 로컬 모드에서 Spark로 처리하고, 동일한 작업을 더 큰 데이터셋으로 클러스터 모드에서 처리해 봐.\n\n2. 예시: 1억 개 이상의 행을 가진 CSV 데이터를 읽어 평균, 합계, 최대값 등을 계산.\n\n3. 목표: 처리 시간 비교와 클러스터의 확장성 체험.\n\n- Partition 이해:\n1. 데이터를 repartition()과 coalesce()로 분할하고 각 작업이 클러스터에서 어떻게 분산되는지 확인.\n\n2. Spark UI를 사용하여 각 노드에서 실행된 작업을 시각적으로 확인.\n\n## 2. 다양한 데이터 소스와 포맷 실험\nSpark는 단순히 CSV나 JSON뿐 아니라, Parquet, ORC, Avro 같은 효율적인 데이터 포맷과 다양한 데이터베이스를 지원해. 이를 활용하면 MySQL 같은 데이터베이스에서는 할 수 없는 복잡한 작업도 가능해.\n\n실습 아이디어:\n- Parquet와 CSV 비교:\n\n1. 같은 데이터를 CSV와 Parquet로 저장한 후 읽기 및 처리 속도를 비교해.\n\n2. 예시: 1GB 이상의 데이터를 CSV와 Parquet로 변환 후, 필터링 작업과 집계를 실행.\n\n- 다양한 데이터 소스 활용:\n\n1. AWS S3, Google Cloud Storage, HDFS에서 데이터를 로드하고 처리.\n\n2. Kafka를 사용해 실시간 스트리밍 데이터를 읽고 분석.\n\n3. MySQL, PostgreSQL에서 데이터를 Spark로 로드한 후 복잡한 조인 및 집계 처리.\n\n## 3. 고급 API와 기능 활용\nDataFrame API 외에도 RDD, Spark SQL, Structured Streaming, GraphX, MLlib 등을 활용하면 Spark만의 강력함을 제대로 느낄 수 있어.\n\n실습 아이디어:\n- Spark SQL로 복잡한 데이터 분석:\n\n1. SQL 쿼리를 작성해 Spark DataFrame에서 복잡한 집계와 조인을 수행.\n\n2. 예시: 사용자 활동 데이터를 분석해 \"하루 평균 액티브 유저\"와 같은 메트릭 계산.\n\n- Structured Streaming:\n\n1. Kafka에서 실시간 데이터를 읽어 분석.\n2. 예시: 실시간 로그 데이터를 모니터링하여 에러 빈도를 실시간으로 집계.\n\n- MLlib 활용:\n\n1. Spark MLlib을 사용해 대규모 데이터에서 머신러닝 모델 학습.\n\n2. 예시: 영화 추천 시스템 구축(ALS 알고리즘 사용).\n\n## 4. 성능 튜닝과 최적화\nSpark의 성능을 최적화하는 방법을 이해하면 일반적인 데이터베이스보다 몇 배 빠르게 작업할 수 있어. 특히 작업의 병렬성, 메모리 관리, Job 스케줄링을 튜닝해 보는 게 중요해.\n\n실습 아이디어:\n- Shuffling 최소화:\n\n1. 조인과 그룹화 시 Shuffling을 줄이기 위해 broadcast()와 partitioning을 실험.\n\n2. 예시: 대규모 데이터셋 간의 조인에서 Broadcast Join 사용 후 속도 비교.\n\n- Cache와 Persist:\n\n1. 데이터를 캐싱하거나 persist()를 사용해 작업 속도를 개선.\n\n2. 예시: 반복적으로 사용되는 데이터셋을 캐싱한 후 쿼리 실행 시간을 비교.\n\n- Execution Plan 분석:\n\n1. explain()을 사용해 실행 계획을 분석하고, 성능 병목을 찾아내 최적화.\n\n## 5. 실전 프로젝트 수행\n이론만으로는 Spark의 진정한 장점을 느끼기 어려워. 실제 문제를 해결하는 프로젝트를 수행하면서 왜 Spark를 써야 하는지 명확히 알게 될 거야.\n\n프로젝트 예시:\n1. 대규모 로그 데이터 분석:\n\n- 웹 서버의 로그 데이터를 수집하고, 접속 수와 에러 발생률을 분석.\n- 실시간 분석과 배치 분석을 병행하여 처리.\n\n2. 데이터 파이프라인 구축:\n\n- 데이터 소스(AWS S3, Kafka 등)에서 데이터를 읽어 Spark로 처리 후 다른 스토리지로 저장(HDFS, Parquet 등).\n- Spark Streaming을 활용해 실시간 데이터 파이프라인 구현.\n\n3. 추천 시스템 구축:\n\n- 대규모 사용자 행동 데이터를 기반으로 추천 시스템(ALS 알고리즘)을 개발.\n\n- 성능 향상을 위해 데이터 파티셔닝 및 캐싱 최적화.\n\n4. 금융 데이터 분석 (예: 네이버 파이낸스):\n\n- 주식 데이터를 수집하고, 특정 기간 동안의 변동성을 계산하여 알람 시스템 구축.\n\n## 6. Spark 코드 기여(Open Source 참여)\nSpark의 오픈소스 프로젝트에 기여하면 내부 구조와 동작 원리를 깊이 이해할 수 있어. 이미 Spark에 관심이 있으니 이런 식으로 참여해 보는 건 어때?\n\n활동 아이디어:\n- Spark의 코드 리포지토리에서 DataFrame API나 Catalyst Optimizer를 연구.\n- 새 기능 추가 요청(issue) 또는 버그 수정에 참여.\n- 문서를 개선하거나 예제를 추가.\n\n## 7. 클러스터에서의 실습\nSpark의 진정한 힘은 분산 환경에서 발휘돼. 로컬 실행만 해서는 한계를 체감하기 어려워.\n\n클러스터 실습 아이디어:\n- AWS EMR, GCP Dataproc, 혹은 온프레미스 Kubernetes 클러스터에 Spark를 배포하고 작업 실행.\n- 노드 수를 늘리거나 줄이면서 실행 시간과 자원 사용량 비교.\n- YARN, Mesos 또는 Kubernetes 스케줄러를 직접 설정해 보고 차이점을 체험.\n\n## 8. 주제별 집중 학습 로드맵\nSpark에서 부족함을 느끼는 영역이 있다면 아래 주제들을 집중적으로 학습:\n\n- Catalyst Optimizer: 쿼리 최적화를 이해하고 explain()을 통해 최적화 과정을 학습.\n- Tungsten Engine: Spark의 메모리와 CPU 최적화 방법 체험.\n- Structured Streaming: 실시간 데이터 처리 시 장애 복구 및 처리 보장 이해.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseilylook%2Fspark_core_experiments","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseilylook%2Fspark_core_experiments","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseilylook%2Fspark_core_experiments/lists"}