- [스파크 완벽 가이드] 10장 - 스파크 SQL31514스파크 SQL 쿼리 실행 방법스파크 SQL CLI스파크의 프로그래밍 SQL 인터페이스스파크 SQL Thrift JDBC/ODBC 서버 카탈로그스파크 SQL에서 가장 높은 추상화 단계는 카탈로그이다.카탈로그는 테이블에 저장된 데이터에 대한 메타데이터뿐만 아니라 데이터베이스, 테이블, 함수 그리고 뷰에 대한 정보를 추상화한다. 테이블테이블은 명령을 실행할 데이터의 구조라는 점에서 DataFrame과 논리적으로 동일하다.스파크에서 테이블을 생성하면 default 데이터베이스에 등록된다. 테이블은 항상 데이터를 가지고 있다.임시 테이블의 개념이 없으며 데이터를 가지지 않는 뷰만 존재한다.따라서 테이블을 제거하면 모든 데이터가 사라지므로 주의해야 한다. 관리형 테이블은 스파크가 데이터 파일을 완전히 관리하는 테이..
- 2024-10-23 12:36:57
- [BW 20] None을 반환하기보다는 예외를 발생시켜라31514False와 동등한 반환 값을 잘못 해석하는 경우는 None이 특별한 의미를 가지는 파이썬 코드에서 흔히 저지르는 실수다.아래 코드처럼 result는 0이 되어야 하는데, 잘못된 입력이 출력되는 상황이 발생한다.x, y = 0, 5def careful_divide(a, b): try: return a / b except ZeroDivisionError: return None result = careful_divide(x, y)if not result: print('잘못된 입력')이를 해결하기 위해 두 가지 방법을 생각해볼 수 있다.반환 값을 튜플로 분리한다.첫 번째 요소에 성공 여부를 표시한다.두 번째 요소에 실제 값을 표시한다.Exception을 호..
- 2024-10-23 11:02:11
- [BW 19] 함수가 여러 값을 반환하는 경우 절대로 네 값 이상을 언패킹하지 말라31514lengths = [63, 73, 72, 60, 67, 66, 71, 61, 72, 70]def get_stats(numbers): mini = min(numbers) maxi = max(numbers) count = len(numbers) average = sum(numbers) / count sorted_numbers = sorted(numbers) middle = count // 2 if count % 2 == 0: lower = sorted_numbers[middle - 1] upper = sorted_numbers[middle] median = (lower + upper) / 2 else: median ..
- 2024-10-22 16:12:39
- [BW 18] __missing__을 사용해 키에 따라 다른 디폴트 값을 생성하는 방법31514만약 defaultdict 의 기본 값을 어떤 인자가 필요한 함수로 지정하면 다음과 같이 오류가 발생한다.from collections import defaultdictpath = "/"def open_file(file_path): try: return open(file_path, 'a+b') except OSError: print(f"경로를 알 수 없습니다: {file_path}") raisefiles = defaultdict(open_file)handle = files[path]handle.seek(0)file_data = handle.read()>>>TypeError: open_file() missing 1 required positional argu..
- 2024-10-22 16:12:08
- [BW 14] 복잡한 기준을 사용해 정렬할 때는 key 파라미터를 사용하라31514다음과 같은 클래스가 있다고 가정해보고 tools 를 정의했다.class Tool: def __init__(self, name, weight): self.name = name self.weight = weight def __repr__(self): return f'Tool({self.name!r}, {self.weight})'tools = [ Tool('수준계', 3.5), Tool('해머', 1.25), Tool('스크류드라이버', 0.25), Tool('끌', 0.25),]tools 에 담긴 여러 인스턴스를 sort()를 통해 정렬할 수 있을까?비교 연산자를 지원하지 않는 오류가 발생한다.Traceback (most rece..
- 2024-10-22 16:11:40
- [BW 13] 슬라이싱보다는 나머지를 모두 잡아내는 언패킹을 사용하라31514아래와 같은 코드는 ages의 요소가 추가되거나 삭제되었지만, 다른 줄에서 깜빡하고 수정하지 않으면 의도하지 않은 결과를 초래할 수 있다.ages = [20, 19, 18, 17, 16, 15, 14, 13]oldest, second_oldest, others = ages[0], ages[1], ages[2:]print(oldest, second_oldest, others)>>>20 19 [18, 17, 16, 15, 14, 13]따라서 별표 식을 사용해 모든 값을 담는 언패킹을 사용하면 좋다.ages = [20, 19, 18, 17, 16, 15, 14, 13]oldest, second_oldest, *others = agesprint(oldest, second_oldest, others)>>>20 1..
- 2024-10-22 16:11:04
- [BW 12] 스트라이드와 슬라이스를 한 식에 함께 사용하지 말라31514스트라이드는 일정한 간격을 두고 슬라이싱을 할 수 있는 특별한 구문이다.arr = ['red', 'orange', 'yellow', 'green', 'blue']odds = arr[::2]evens = arr[1::2]print(odds)print(evens)>>>['red', 'yellow', 'blue']['orange', 'green']하지만 스트라이드는 종종 예기치 못한 동작이 일어나서 버그를 일으킬 수 있다. 유니코드 문자열을 UTF-8로 인코딩하고 스트라이드를 사용해 역으로 뒤집은 뒤, 다시 디코딩을 해보면 어떨까?word = '한글은 위대해'x = word.encode('utf-8')y = x[::-1]z = y.decode('utf-8')print(x)print(y)print(z)>>>Un..
- 2024-10-22 16:10:32
- [BW 11] 시퀀스를 슬라이싱하는 방법을 익혀라31514리스트를 슬라이싱한 결과는 새로운 리스트이다. 대입에 슬라이스를 사용하면 원본 리스트에서 지정한 범위에 들어 있는 원소를 변경한다.그리고 대입 슬라이스와 대입되는 리스트의 길이가 같을 필요가 없다.arr = [1, 2, 3, 4, 5, 6, 7]print(arr)# [2:5]는 총 3개의 원소를 나타내지만, [8, 9]만 대입해도 상관없다.arr[2:5] = [8, 9]print(arr)>>>[1, 2, 3, 4, 5, 6, 7][1, 2, 8, 9, 6, 7]
- 2024-10-22 16:09:51
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)