데이터프레임 (DataFrames/Datasets)

데이터프레임 (DataFrames/Datasets)

Dataset은 데이터의 분산 컬렉션(distributed collection)이에요. Dataset은 Spark 1.6에서 추가된 새 인터페이스로, RDD의 장점(강한 타입, 강력한 람다 함수 사용 가능)과 Spark SQL의 최적화된 실행 엔진의 장점을 함께 제공합니다. Dataset은 JVM 객체로부터 생성할 수 있고, 이후 함수형 변환(map, flatMap, filter 등)으로 조작할 수 있어요. Dataset API는 ScalaJava에서 사용할 수 있습니다. Python은 Dataset API를 지원하지 않아요. 하지만 Python은 동적인 특성 덕분에 Dataset API의 장점 상당수를 이미 누릴 수 있습니다(예: row.columnName처럼 행의 필드에 이름으로 자연스럽게 접근할 수 있어요). R의 경우도 비슷합니다.

DataFrame이름 있는 컬럼으로 구성된 Dataset이에요. 개념적으로는 관계형 데이터베이스의 테이블이나 R/Python의 데이터 프레임과 같지만, 그 안쪽에서는 더 풍부한 최적화가 이루어집니다. DataFrame은 구조화된 데이터 파일, Hive의 테이블, 외부 데이터베이스, 기존 RDD 등 다양한 소스로부터 만들 수 있어요. DataFrame API는 Python, Scala, Java, R에서 사용할 수 있습니다. Scala와 Java에서 DataFrame은 Row들의 Dataset으로 표현됩니다. Scala API에서 DataFrame은 단순히 Dataset[Row]의 타입 별칭(type alias)일 뿐이에요. 반면 Java API에서는 Dataset<Row>를 써서 DataFrame을 표현해야 합니다.

이 문서 전반에 걸쳐 Scala/Java의 Row Dataset을 DataFrame이라고 자주 부를 거예요.