Python(61)
-
[SparkSQL] DataFrame 다루기
DataFrame SparkSQL에서 다루는 Structured Data로 아주 주요 개념이다. 기본적으로 Lazy Execution, 분산, Immutable이란 RDD의 장점을 가짐과 동시에 구조화(Structured)되어 있어 자동 최적화까지 가능하다. CSV, JSON, Hive 등으로 읽거나 변환도 가능하다. 본격적으로 DataFrame을 다뤄보자. "본 포스팅은 패스트캠퍼스의 강의를 듣고, 정리한 자료임을 밝힙니다." Basic Setting import os import findspark findspark.init(os.environ.get("SPARK_HOME")) import pyspark from pyspark import SparkConf, SparkContext import pand..
2022.05.07 -
[Spark] SparkSQL 개념 및 코드
SparkSQL Structured Data를 다루기 위해 Spark에서도 SQL문을 쓸 수 있게 했다. 1. Structured Data와 Unstructured Data의 차이점은 무엇이고 2. 왜 RDD가 아닌 Structured Data를 써야 하며 3. Spark에서 SQL문을 어떻게 쓸 수 있을까? 포스팅을 읽어가며 질문을 해소해보자. "본 포스팅은 패스트캠퍼스의 강의를 듣고, 정리한 자료임을 밝힙니다." Structured Data vs Unstructured Data Unstructured Data : free form - 로그 파일 - 이미지 말 그대로 free form. 자유로운 형식의 데이터다. 이미지가 될 수도 있고, 하나의 스트링이 될 수 있다. 이런 데이터들을 정제하여 Struc..
2022.05.06 -
[Algorithm] 누적 합(Prefix sum) 알고리즘 개념 및 코드
누적 합 Prefix sum 이번 포스팅에선 누적 합 알고리즘을 살펴보겠다. 꽤 간단하지만 알고리즘이지만, 의외로 모르는 사람이 꽤 있다. Let's Go 다음과 같은 문제가 있다. n_list = [n for n in range(1, 100)] 50번째부터 - 80번째까지의 수를 더한 값을 리턴하라. 누적 합 알고리즘을 사용하지 않는다면? 단순히 리스트를 50번째부터 80번째까지 뽑아서 계산하는 방식을 가장 먼저 떠올릴 것이다. 코드로 표현하면 다음과 같다. sum(n_list[49:79]) 겉으론 문제가 없어 보이지만, 누적 합을 구하라는 요청이 많아지면 상황이 달라진다. import time n_list = [n for n in range(1, 10000)] start = time.time() fo..
2022.05.04 -
[Algorithm] 동적계획법 (Dynamic Programming) 개념 및 구현
동적계획법 Dynamic Programming 이번 포스팅에선 동적계획법 알고리즘을 살펴보겠다. 동적계획법은 "한 번 계산한 문제는 다시 계산하지 않는다"라는 신념을 가진 녀석이다. 메모리를 조금 써서 속도를 비약적으로 상승시키는 것이 핵심이다. Let's Go 동적계획법이 아니라면? 보통은 단순 재귀. 동적계획법의 성능을 확인할 수 있는 문제가 있다. 바로 피보나치 수열이다. 피보나치 수열을 동적계획법이 아닌 단순 재귀를 사용하여 구현하면 다음과 같다. def fibo(x): if x == 1 or x ==2: return 1 else: return fibo(x-1) + fibo(x-2) 위의 코드로 피보나치 수열을 구한다고 생각해보자. --- fibo(5)를 구하기 위해선, fibo(4)와 fibo(..
2022.05.03 -
[BOJ] # 9184: 신나는 함수 실행
문제 재귀 호출만 생각하면 신이 난다! 아닌가요? 다음과 같은 재귀 함수 w(a, b, c)가 있다. if a 20, then w(a, b, c) returns: w(20, 20, 20) if a < b and b < c, then w(a, b, c) returns: w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c) otherwise it returns: w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1) 위의 함수를 구현하는 것은 매우 쉽다. 하지만, 그대로 구현하면 값을 구하는데 매우 오랜 시간이 걸린다. (예를 들면, a=15, b=15, c=15) a, b, c가 주어졌을 때, w(a, b, c)를 출..
2022.05.03 -
[BOJ] # 1003번: 피보나치 함수
문제 다음 소스는 N번째 피보나치 수를 구하는 C++ 함수이다. int fibonacci(int n) { if (n == 0) { printf("0"); return 0; } else if (n == 1) { printf("1"); return 1; } else { return fibonacci(n‐1) + fibonacci(n‐2); } } fibonacci(3)을 호출하면 다음과 같은 일이 일어난다. fibonacci(3)은 fibonacci(2)와 fibonacci(1) (첫 번째 호출)을 호출한다. fibonacci(2)는 fibonacci(1) (두 번째 호출)과 fibonacci(0)을 호출한다. 두 번째 호출한 fibonacci(1)은 1을 출력하고 1을 리턴한다. fibonacci(0)은 ..
2022.05.02