RDD는 저수준 API라서 모든 연산을 직접 관리해야 하고, Catalyst & Tungsten 최적화를 받지 못해서 느림.DataFrame은 스키마 기반의 테이블 형태라 SQL처럼 다룰 수 있고, Catalyst & Tungsten 최적화 덕분에 성능이 훨씬 좋음.1. DataFrame과 DataSet의 차이 (Spark 2.0+)Spark 2.0부터 DataFrame은 Dataset[Row]로 구현됨즉, DataFrame = Dataset[Row] 이므로 DataFrame과 Dataset은 사실상 같은 개념다만, DataFrame은 Row 객체를 저장하고, Dataset은 Type-safe하게 사용할 수 있는 장점이 있음.언제 DataFrame vs Dataset을 사용할까?DataFrame (Dat..

1. 스트림 프로세싱 (stream processing, Dstream) batch processing은 고정된 (큰)dataset에 한번 연산을 하는거였다면, stream processing은 끝없이 들어오는 데이터의 흐름을 연속적, 준실시간으로 처리하는것.IOT센서, 웹앱 상호작용, 신용카드 트랜잭션에 사용실시간 대시보드, 온라인머신러닝등 다양한 분야에서 사용batch procssing과 같이 사용하되, 서로의 약점을 보완하고, 강점을 취하는 방식으로도 사용 (lamda 아키텍쳐) 2. stream processing 방법크게 두가지 방법론이 존재레코드 단위 처리 모델 (record-at-a-time processing model)마이크로배치 스트림 처리 모델 (micro batch stream p..

0.Event Time windows, Processing Time windows steaming 순서에 대해 알아보는 시간이 필요하여 정리했다. 1.window funtion데이터의 특정한 범위를 설정하고, 그 범위 내에서 집계 함수 등을 적용spark streaming에서는 time-based window만을 사용 (다른 윈도우 사용시 에러)데이터를 시간적으로 나누는 범위를 설정하는 방식스트리밍 데이터는 끝없이 흐르는 데이터이기 때문에, 특정 시간 단위로 데이터를 나누어 집계나 분석을 수행함예를 들어, 초당 데이터를 받아오더라도, "1분 간격으로" 데이터를 묶어서 평균, 합계 등을 계산할 수 있음 크게 세가지 방식 1.1 Sliding window1.2 Tumbling window1.3 Sessi..
1️⃣ await asyncio.gather(*tasks)만 사용하는 경우레스토랑의 요리사들이 각 요리를 준비하고 모든 요리가 다 완성된 후 한꺼번에 손님에게 서빙한다. 메뉴: 샐러드, 파스타, 스테이크import asyncioimport timeasync def prepare_dish(dish): print(f"Starting to prepare {dish}...") await asyncio.sleep(2) # 준비 시간 print(f"{dish} is ready!") return f"{dish} is ready!"async def main(): # 메뉴 주문 orders = ["Salad", "Pasta", "Steak"] tasks = [prepare_dish..
🍲 await: 웨이터가 요리가 나올 때까지 기다리기웨이터가 요리를 기다리는 것처럼, await는 비동기 작업이 완료될 때까지 실행을 일시 중단함import asyncioasync def prepare_dish(dish_name): print(f"{dish_name} 준비 중...") await asyncio.sleep(2) # 요리 시간 대기 print(f"{dish_name} 완성!")async def serve_order(): await prepare_dish("파스타") # 파스타가 완성될 때까지 대기asyncio.run(serve_order()) 🍽️ asyncio.create_task: 여러 주문 동시에 처리하기바쁜 레스토랑에서 웨이터는 여러 주문을 동시에 받을 수..

1.마주한문제로컬에서 이상이없던(?) 코드가 배포시 Error로 반환이 안되는 문제 발생. 2.해결vercel 배포시 나오는 에러를 사실 로컬일때부터 나오는 에러의 연장선이다. npm install --force 를 하거나 버전끼리 충돌이 일어나서 버전들간의 업데이트 혹은 버전을 낮춰서 해결하거나&& npm install --force 를 하거나 하는 방식으로 vercel에 배포시 세팅을 해둔다면 에러가 해결된다.

1.await로직 + asyncio.gather await self.prisma.ssg_dfinary.create(data=model_data)await asyncio.gather(*tasks) 모든 작업을 병렬로 처리할 수 있습니다. 각 작업을 추가하고 asyncio.gather(*tasks)를 통해 모든 작업을 병렬로 실행함으로써 전체적인 처리 속도를 향상시킬 수 있습니다. 특히, 여러 작업 간에 의존성이 없는 경우에 적합합니다. 2. await로직await self.prisma.ssg_dfinary.create(data=model_data) 각 작업이 순차적으로 실행되기 때문에 각 작업의 진행 상태를 명확하게 파악할 수 있습니다. 작업 간의 의존성이 있는 경우에 유용하며, 코드의 가독성이 높습니다..

기존에 사용하던 planetscale계정에서 다른 계정으로 옮겨갔기 때문에 db export & import를 하려한다. 1.docs확인 https://planetscale.com/docs/reference/database docs를 살펴보면 나오는 명령어를 참고하자 2.file dump pscale database dump 파랑색db 뒤에 경로로 파일이 덤핑된다 파일들을 사펴보니 스키마와 데이터들이 해당경로로 복사된다. 이제 새로운 db에 테이블 스키마와 데이터를 넣어보자 3.db table delete *db가 이미존재하다면 삭제해주면될것 잘삭제시킨후 5.DB import 6.덤핑완료 확인하기

1.함수형프로그래밍에서의 값의부재란 const array1 = [1, 2, 3, undefined]; const array2 = [1, 2, 3, null]; console.log(sumArray(array1)); // 어떤 값이 나올까요? console.log(sumArray(array2)); // 어떤 값이 나올까요? 우리는 흔하게 조건처리를 하거나 map함수를 사용하며 값이 undifined이거나 null일경우 값이 없다고 하여 이를 함수형프로그래밍에서는 값의 부재다. 라고 표현합니다. 함수형 프로그래밍에서의 모든 함수는 순수함수이루어져, 모든 입력값에 대해 출력값을 정해주어야 하기때문에(undefined포함) map함수를 처리하더라도 undefined일 경우나 null일경우 값의 부재를 명시적으로..