파이썬에 경험이 있다면, 데이터를 절차적 또는 명령형으로 조작하는 것에 익숙할 것입니다. 즉, 데이터를 한 상태에서 다른 상태로 변환하기 위해 필요한 정확한 단계를 제공합니다. 반면에 SQL은 선언적이어서 원하는 결과를 설명하고 소프트웨어가 해당 결과를 생성하는 데 사용됩니다. PySpark는 파이썬을 통해 복잡한 SQL 쿼리를 편리하게 작성하기 위한 라이브러리입니다. 즉, 파이썬의 절차적 구문에서 SQL 개념에 액세스할 수 있습니다. 이렇게 하면 파이썬의 유연성, SQL의 편리함 및 스파크의 병렬 처리 능력이 활용됩니다.
데이터셋 전체와 열을 기반으로 데이터를 처리하는 관점에서 개념 모델을 발전시키는 것이 도움이 될 것입니다. 변수, 리스트, 딕셔너리, 루프 등을 사용하여 데이터를 직접 조작하는 대신 데이터프레임을 사용합니다. 즉, 파이썬 원시값과 연산자 대신 스파크의 분산 방식으로 데이터프레임에서 작동하는 빌트인 연산자를 사용할 것입니다.
파이썬에서 숫자 목록이 있고 각각에 5
를 더하려고 한다고 가정해 보겠습니다.
Copied!1 2 3 4 5 6 7
old_list = [1,2,3] # 영어: 이전 목록, 한국어: 이전 목록 new_list = [] # 영어: 새로운 목록, 한국어: 새 목록 for i in old_list: # 영어: 이전 목록의 각 요소에 대해, 한국어: 이전 목록의 각 요소에 대해 added_number = i + 5 # 영어: 5를 더한 숫자, 한국어: 5를 더한 숫자 new_list.append(added_number) # 영어: 새로운 목록에 5를 더한 숫자를 추가, 한국어: 새 목록에 5를 더한 숫자를 추가 print new_list >>> [6,7,8] # 영어: 출력 결과, 한국어: 출력 결과
PySpark에서는 이것이 다음과 같습니다
Copied!1 2 3
# 'old_dataframe'라는 기존의 데이터프레임에서 'number'라는 열의 각 값에 5를 더한 새로운 열 'added_number'를 생성하고, # 이를 포함한 새로운 데이터프레임을 'new_dataframe'라는 이름으로 생성합니다. new_dataframe = old_dataframe.withColumn('added_number', old_dataframe.number + 5)
new_dataframe
는 이제 다음을 나타냅니다.
number | added_number |
---|---|
1 | 6 |
2 | 7 |
3 | 8 |
흥미롭게도, DataFrame
오브젝트는 실제로 메모리에 데이터를 포함하지 않습니다: 이것은 Spark의 데이터에 대한 출처입니다. DataFrames는 게으르게 평가됩니다. 우리가 Spark에게 DataFrame으로 실제로 무언가를 하도록 요청할 때(예를 들어 Foundry에 쓰기) 그것은 우리가 생성한 모든 중간 DataFrames를 통과하며, 최적화된 쿼리 계획을 생성하고 Spark 클러스터에서 실행합니다. 이를 통해 Foundry는 단일 서버나 노트북에서 메모리에 들어갈 수 있는 데이터의 양을 초과하여 확장할 수 있습니다.