[Spark: The Definitive Guide] | April 28, 2022
Spark: The Definitive Guide 내용 정리
DataFrame
vs Typed Dataset
case class
나 JavaBean
을 사용해야 한다.Row는 SQL, RDD, Data source에서 얻거나 직접 만들 수 있다.
spark.range(2).collect()
>>> [Row(id=0), Row(id=1)]
Spark data type을 python에서 사용
from pyspark.sql.types import *
b = ByteType()
b
>>> ByteType
Spark data type | Python data type |
---|---|
ByteType | int, long (1 byte, -125~127) |
ShortType | int, long (2 bytes, -32768~32767) |
IntegerType | int, long (숫자값이 너무 크면 LongType 사용) |
LongType | long (8 bytes, 더 큰 숫자는 decimal.Decimal 사용) |
FloatType | float (4 bytes, single-precision floating point) |
DoubleType | float |
DecimalType | decimal.Decimal |
StringType | string |
BinaryType | bytearray |
BooleanType | bool |
TimestampType | datetime.datetime |
DateType | datetime.date |
ArrayType | list, tuple, array |
MapType | dict |
StructType | list, tuple (ex. StructType([StructField, …])) |
StructField | 각 field의 type (ex. StructField(name, dataType, [nullable])) |
User code
-> Unresolved logical plan
코드의 유효성과 table/column의 존재 여부만 판단
실행 계획 검증 X
Spark analyzer는 column/table을 검증하기 위해 catalog(a repository of all table and DF info)를 활용
필요한 table이나 column이 catalog에 없다면 unresolved logical plan이 만들어지지 않는다.
-> Resolved logical plan
-> Catalyst Optimizer로 전달 (Logical optimization)
Catalyst Optimizer: Predicate pushing down이나 selections를 이용해 logical plan을 optimize 하는 규칙 모음
-> Optimized logical plan
Physical plan은 일련의 RDD와 transformation으로 변환된다.
Spark는 DataFrame, Dataset, SQL로 정의된 query를 RDD transformation으로 compile 한다.
따라서 spark를 compiler라고 부르기도 한다.
Optimized logical plan
-> 다양한 physical plan 생성
-> Cost model을 이용해서 비교
ex) table의 크기나 partition 수 등의 physical attributes를 고려해 연산 수행에 필요한 비용을 계산하고 비교
-> Best physical plan
-> Execute on the cluster