전체 글 58

[Spark]UDF 의 정의 및 사용 방법 + UDF 별 수행 속도차이(PySpark)- 24.11

UDF 란?User-Defined Functions (UDFs) are user-programmable routines that act on one row. (출처 스파크 Docs)즉 특정 로직을 각 행에 적용할 수 있도록 지원하는 기능이다. 더 쉽게 말하면 함수를 선언하여 Spark 데이터에 적용시키는 것이다.(map의 개념과 유사) 왜 사용할까?일반 함수를 사용하는 것과 동일하다.내장함수로 지원하지 않는 기능을 사용자가 직접 정의해두고, 편리하고 재사용이 용이하도록 사용하는 것이다 단점?우선 기본 Pyspark UDF를 가정하여 말하자면, 내장함수보다 느리다.내장함수는 기본적으로 Spark SQL 엔진 내 정의되어있고 그 안에서 실행된다.따라서 내장함수는 JVM 기반으로 실행되기 때문에 직력화, 역직..

[JAVA] JVM (Java Virtual Machine) / Garbage Collector

[JVM (Java Virtual Machine)] - Java Virtual Machine의 약자- OS에 종속받지 않고  CPU가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터 [JVM 구조] 프로그램이 실행되면 OS로부터 프로그램이 필요로 하는 메모리 할당자바 컴파일러를 통해 개발자가 작성한 코드(.java)를 바이트 코드(.class)로 변환 Class Loader에서 바이트 코드를 JVM에 로딩로딩 된 바이트 코드를 execution engine을 통해 기계어로 해석해석된 바이트 코드들은 runtime data areas에 배치되어 실질적인 수행 [Garbage Collector (GC)]- 더이상 사용되지 않는 인스턴스를 찾아 메모리에서 삭제[GC 동작단계] Stop The World- ..

개발언어/JAVA 2024.11.26

[Python] 리스트의 원소 추가 방법 및 관련 문제

개요코테 문제를 풀다 시간 복잡도를 보기엔 초과할 것 같지 않았던 코드가 계속 시간이 초과한 문제가 발생했다.알고보니, 리스트에 원소 추가한 방식이 문제였고 정리해두려 정리해둔다.  추가 방식1. Append (뒤에 추가)a = []a.append("one")평균 삽입 시간 복잡도는 O(1).만약 원소 추가할때 리스트에 할당한 초기 메모리를 초과한다면 새로 할당 작업을 해야하니 O(n)이 할당된다. 2. Insert(삽입 위치 지정)a = ["one","three"]a.insert(1,"two")삽입 시간 복잡도는 O(n).내가 틀린 부분이다. 난 insert(0, value) 처럼 사용하면 큐와 비슷하게 O(1) 로 사용 가능할거라 착각했지만,사실 당연하게도 첫 자리에 원소를 삽입 후 나머지 원소를 뒤..

개발언어/PYTHON 2024.11.22

[Spark] Databricks Community Edition 무료로 사용하기 -2024.11

개요Spark 관련 학습을 진행하고자 하여, 개발 환경을 꾸리고자 합니다. Docker 나 직접 설치로 로컬에 구성하거나 타 클라우드를 사용할 수 있겠지만, 한번 사용해보고 싶었던 Databricks를 사용해 볼 겸 Databricks에 개발 환경을 해볼까 합니다.  1. DataBricks 가입하기DataBricks 에 접속하여 가입을 진행합니다. Try Databricks - Unified Data Analytics Platform for Data EngineeringDiscover why businesses are turning to Databricks to accelerate innovation. Try Databricks’ Full Platform Trial free for 14 days!www..

[CS] HTTP 의 개념과 구성요소

HTTP 란(Hypertext Transfer Protocol) ?HTTP는 웹 브라우저(클라이언트) 와 서버가 데이터를 통신하고 교환할 수 있는 표준 프로토콜이다.OSI7 계층 중 애플리케이션 계층 즉 최상위 레이어에 위치하고 있다. HTTP의 특징1. Stateless (무상태) - 요청이 끝나면 클라이언트와 서버간 상태를 유지하지 않습니다.  * 연결을 안하고 있다는 의미 X, 이전 요청에 대한 상태를 유지 안하고 있다는 의미 입니다.- HTTP/1.1 부터 keep-alive 를 통해 연결 유지 가능  * keep-alive : 요청을 처리한 후에도 TCP 연결을 즉시 종료하지 않고 일정시간 유지합니다.    TCP 는 연결 수립 과 종료 시 3-hand-shake 및 4-hand-shake 방식..

IT 기술/CS 2024.11.15

[프로그래머스] 단어변환 - BFS, DFS 별 풀이

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/43163 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  조건을 만족하는 케이스를 기준으로 탐색을 해가며 최소로 만족하는 step 을 되는 문제이다.최단거리랑 같은 개념으로 주로 BFS 를 사용한다면, 최소 step 에 return 을 하면 되기 때문에 BFS 방식을 추천한다.아래 풀이 코드에선 BFS, DFS 두가지 방식으로 풀이를 했다. def check(a, b): max_diff = 1 for i in range(len(a)): if a[i] != b[i..

[CS] 캐시 교체 방법론 및 구현 방법

캐시는 Hit 시 캐시에 있는 정보를 빠르게 반환할 수 있지만, Miss 가 된다면 캐시 접근 후 Disk 나 다른 저장소 등접근 횟수가 늘어날 수 있다. 따라서 캐시는 자주 참조될 것 같은 데이터 혹은 접근 예정인 데이터가 적절히 배치되어 저장되있어야 더 효율을 발휘한다.이러한 캐시의 특성상 참조되지 않을 것 같은 정보를 캐시에서 교체하는 방법론을 정리하고자 한다. 아래 3가지는 주로 언급되는 교체 방식이다.1. FIFO- 선입선출. 말 그대로 먼저 들어온 것 즉 오래된 것을 교체하는 방식이다. Queue 로 구현 가능하다.2. LFU (Least Frequntly used)- 가장 적게 사용된 캐시를 교체하는 방식이다. 카운팅 을 사용해서 구현 가능하다.3. LRU (Least recently use..

IT 기술/CS 2024.11.13

[Python] 팩토리 메서드 패턴이란?

알게 모르게 개발 간 자주 사용하는 패턴이지만, 단어와 매칭이 안되거나 개념을 정리해 보려는 분들이 참고하면 좋을 것 같다. 팩토리 패턴이란?객체의 생성 과정을 클라이언트 코드로부터 분리하여, 구체적인 클래스에 대한 의존성을 줄이고 확장성을 높이기 위해 객체 생성에 대한 책임을 팩토리로 넘기는 설계 패턴입니다. 이 패턴을 사용하면 클라이언트는 객체의 구체적인 생성 방식을 몰라도 객체를 사용할 수 있습니다 와닿지 않는 말들 같다... 간단히 말하자면 객체 생성의 책임을 별도의 팩토리 메서드나 팩토리 클래스로 분리하여 관리하는 것이다코드로 보는게 더 직관적이니, 예시 코드를 첨부해 보겠다.  아래 코드는 팩토리 메서드 패턴을 사용하지 않는 코드이다.클라이언트 쪽에서 내부 코드를 어느 정도 파악하고 별개 객체..

개발언어/PYTHON 2024.11.10

[알고리즘] 기초 알고리즘 공부하기 -1 (알고리즘 종류)

알고리즘 종류 간략하게 정리하기 1. 정렬 알고리즘  - Quick Sort / Merge Sort / Heap Sort / Selection Sort / Bubble Sort EX. Quick Sort  - 시간복잡도 : O(n log n) - 대량 데이터 정렬할 때 사용 - 재귀적으로 피벗을 기준으로 왼쪽과 오른쪽 부분을 나누어 정렬import java.util.Arrays;public class QuickSort { public static void quickSort(int[] arr, int left, int right) { if (left >= right) return; int pivot = arr[(left + right) / 2]; int index..

알고리즘 2024.11.10

[Python] Garbage collector(가비지 컬렉터)란 ?

막연히 Python 가비지 컬렉터가 동작함은 알고 있었지만, 내부적으로 어떤 기준에서 동작하는지 에 대한 질문을 받아정리해보려 한다.난 이 정보를 알아보기 전까지 막연히 Java와 비슷하게 동작하는 줄 알았는데, 꽤 다른 것 같다... Garbage collector(가비지 컬렉터) ?우선 Garbage collector 란  메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요 없게 된 영역을 해제하는 기능이다.예를 들어 A라는 객체를 생성하면, 해당 객체는 메모리를 점유하고 있는데, 그중 사용하지 않는 혹은 우선순위가 밀리는 객체의 메모리를 해제하는 것이다 Garbage collector 동작 방식 - Python기본적으로 파이썬은 아래 두 가지 방식으로 GC를 수행한..

개발언어/PYTHON 2024.11.09