분류 전체보기 1187

[Spark] Window에 설치

개요 Spark에 대한 개념만 공부할 뿐만 아니라 직접 코딩을 해볼 수 있도록 Window 10에 환경을 구성해보려고 한다. 최신 버전인 Spark 3.5.0를 설치한다. 설치가 필요한 소프트웨어는 다음과 같다. - Java 11 - Spark 3.5.0 - Hadoop 3.3 : window 용 바이너리만 설치. ❗❓ Scala는 설치 안 하나요? Spark는 scala 2.12 / 2.13 버전에서 실행되는데, 이 글에서 설치할 Spark 버전에는 scala가 pre-built 되어 있어 별도 설치가 필요하지 않다. 물론 scala로 코딩을 한다면 설치해야할 것 같지만, 추가로 공부를 해야 하는 입장이라 아무래도 python으로 코딩할 것 같다. 따라서 이 글에서는 설치하지 않는다. Java 설치 공..

Hadoop EcoSystem 2023.11.29

[Spark] DataFrame

DataFrame 행과 열로 구성된 분산 데이터 구조로, Spark 1.3에서 도입되었다. 각 열의 이름과 데이터 유형을 정의하는 스키마를 가져 정형 데이터를 다루기 좋다. RDD VS DataFrame DataFrame은 RDD의 성능적 이슈로 등장하게 되었다. 먼저 RDD에는 스키마 개념이 없어 구조화된 데이터와 비구조화된 데이터를 함께 저장할 수 있는 대신 처리에 대한 효율성은 떨어진다. 그리고 제대로 동작하기 위해서는 디스크와 메모리에 저장 공간이 충분해야 하고, 기본적으로 직렬화와 Garbage Collection을 사용하기 때문에 동작 시 메모리 오버헤드가 증가할 수 있다. 특징 1. 구조화된 구조 구조화된 데이터를 다루기 좋고, SparkSQL 등을 통해 데이터에 대한 쿼리를 수행할 수 있다..

Hadoop EcoSystem 2023.11.28

[Spark] SparkSession VS SparkContext

개요 Spark 샘플 코드를 보면 데이터를 로드하고 처리하기 전에 SparkSession, SparkContext 객체를 선언하는 것으로 보인다. 각각 어떤 역할을 하는지 정리한다. SparkContext SparkContext는 Spark 1부터 사용할 수 있는 Spark 기능의 진입점에 해당한다. 클러스터에서 RDD, accumulators, 브로드캐스트 변수 등을 구축하는 데 사용하는 Spark 클러스터의 연결이라고 할 수 있다. SparkContext는 애플리케이션이 Resource Manager를 사용해 Spark 클러스터에 연결할 수 있게 한다. 참고로 SparkContext를 만들기 전에는 SparkConf 객체를 먼저 생성해야 한다. import org.apache.spark.{SparkC..

Hadoop EcoSystem 2023.11.27

[Linux] sshpass - 원격 서버 crontab 설정하기

개요 Bash 쉘 스크립트에서 sshpass를 이용해 원격 서버의 crontab에 스케쥴링 설정을 추가하려고 한다. 방법을 적어둔다 + 기존 항목에서 추가할 항목을 확인하거나 수정하는 등의 작업은 다루지 않는다. 쉘로 crontab 설정 crontab_set_str='crontab에 설정할 내용' (crontab -l 2>/dev/null; echo "$crontab_set_str") | crontab - 동작 방식 1. crontab -l 2>/dev/null : 현재 crontab 항목 확인 2. echo "$crontab_set_str" : 기존 crontab 항목에 추가할 항목 출력. 1번을 함께 고려하면 기존 항목과 같이 출력하는 것이 된다. 3. crontab - : 전달받은 파일, 표준 입력..

Linux 2023.11.24

[Python] dotenv - .env 파일 읽기

개요 Airflow 프로세스를 동작시킬 때 KEY=VALUE 형태로 정의된 환경 변수 파일에 적절한 값을 저장/로드하여 사용하는데, 해당 값을 Python으로도 사용하려고 한다. 확인해보니 .env 파일로부터 키-값 형식의 값을 읽어 환경 변수로 설정할 때는 python-dotenv라는 패키지를 사용하는 것 같다. 패키지 사용 방법을 정리해둔다. python-dotenv 설치 python-dotenv는 기본 내장 패키지가 아니기 때문에 별도 설치가 필요하다. pip install python-dotenv 모듈 임포트 사용 사례에 따라서 다음과 같이 import 하여 사용한다. from dotenv import load_dotenv # 환경 변수로 설정 from dotenv import dotenv_val..

Python 2023.11.23

[Linux] sshpass - 문자열을 원격 서버 파일로 전달하기

개요 Bash 쉘 스크립트에서 변수에 저장되어 있는 문자열을 sshpass를 이용해 원격 서버에 저장하려고 한다. 방법을 적어둔다. 시도 처음에는 다음과 같은 명령어를 사용했다. #!/bin/sh SCRIPT='전달할 문자열' SSH_PASSWD='SSH 비밀번호' SSH_USERNAME='SSH 계정명' IP='원격지 IP' PATH='파일경로' FILE_NAME='파일명' sshpass -p $SSH_PASSWD ssh -p $SSH_PORT -o StrictHostKeyChecking=no -t $SSH_USERNAME@IP 'echo $SCRIPT > $PATH/$FILE_NAME' 하지만 실행했을 때 의도한 대로 동작하지 않고, 원격지 서버에는 빈 파일만 생성되어 있었다. 해결 문자열을 원격지 ..

Linux 2023.11.22

[Python] PyMySQL - DELETE 하기

개요 2022.11.05 - [Python] PyMySQL - MySQL SELECT 하기 2023.11.17 - [Python] PyMySQL - INSERT 하기 위 두 개 글에서 Python을 이용해 MySQL에 저장된 데이터를 조회하고, 데이터를 테이블에 저장했다. 이번 글에서는 테이블에 저장한 데이터를 삭제해보려고 한다. 예시 테이블 예시로 위와 같은 users 테이블이 있다고 하자. DDL 더보기 CREATE TABLE users ( NAME VARCHAR(10), EMAIL VARCHAR(50), PRIMARY KEY (NAME) ); INSERT INTO users(NAME, EMAIL) VALUES ('daum', 'test@daum.net'), ('june', 'june@tistory...

Python 2023.11.21

[MySQL] 집계 함수 ALL, ANY 구현

개요 Python에는 여러 데이터에 대한 참, 거짓을 판단할 때 사용할 수 있는 all, any 함수가 존재한다. 참고 : 2022.10.08 - [Python] any/all - 여러 요소의 참/거짓 확인 비슷한 방식으로 MySQL에서 SQL을 이용해 그룹 별 여러 데이터에 대한 참, 거짓을 판단하고 싶다. 방법을 알아보자. 참고로 Subquery로 제공되는 ALL, ANY가 아니다. 예시 테이블 | month | day | amount | | ----- | --- | ------ | | 1 | 3 | 9000 | | 1 | 5 | 8000 | | 3 | 15 | 20000 | | 6 | 14 | 110123 | | 6 | 18 | 3000 | | 12 | 20 | 101000 | | 12 | 25 |..

Database 2023.11.20

[Python] PyMySQL - INSERT 하기

개요 2022.11.05 - [Python] PyMySQL - MySQL SELECT 하기에서 python으로 MySQL에 저장된 데이터를 조회해 봤는데, 이번 글에서는 INSERT를 수행해보려고 한다. cursor.execute PyMySQL로 일회성 SQL을 실행할 때는 cursor 클래스에 정의된 execute 함수를 사용한다. 예시로 다음과 같은 users 테이블이 있다고 하자. DDL 더보기 CREATE TABLE users ( NAME VARCHAR(10), EMAIL VARCHAR(50), PRIMARY KEY (NAME) ); INSERT INTO users(NAME, EMAIL) VALUES ('june', 'june@tistory.com'), ('passwd', 'passwd@tisto..

Python 2023.11.17

[MySQL] INSERT ~ ON DUPLICATE KEY UPDATE (insert or update)

UPSERT UPDATE, INSERT의 합성어로, 테이블에 추가하고자 하는 데이터의 기준 값이 데이블에 없으면 데이터를 추가하고 있으면 데이터를 갱신하는 것을 의미한다. 즉, INSERT OR UPDATE라고 할 수 있다. 데이터베이스 엔진마다 지원 여부와 문법이 다른데, MySQL은 INSERT ~ ON DUPLICATE KEY UPDATE 문으로 지원한다. INSERT ~ ON DUPLICATE KEY UPDATE INSERT INTO table(key1, key2, col1, col2) VALUES(val1, val2, val3, val4) ON DUPLICATE KEY UPDATE col1 = val3, col2 = val4; INSERT문에 ON DUPLICATE KEY UPDATE을 지정하면..

Database 2023.11.16