2016-06-26 4 views
5

우리는 문자열 열 col1과 배열 열 col2을 가진 DataFrame이 있다고 가정합니다. 나는 스파크 작업의 배후에 어떤 일이 벌어지는 지 알아 궁금 :스파크 선택 - 폭발 관용구는 어떻게 구현 되었습니까?

df.select('col1', explode('col2'))

select 입력으로 Column 객체의 순서를 받아, explodeColumn 그래서 유형의 일치를 반환 것으로 보인다. 그러나 explode('col2')에 의해 반환 된 열은 논리적으로 col1과 다른 길이이므로 출력 DataFrame을 구성 할 때 선택이 어떻게 "동기화"되는지 어떻게 알고 있는지 궁금합니다. 단서를 찾기 위해 Column 클래스를 보았지만 실제로 아무것도 찾을 수 없었습니다.

답변

6

대답은 간단합니다. Column과 같은 데이터 구조는 없습니다. Spark SQL은 캐싱을 위해 기둥 형 스토리지를 사용하고 일부 저수준 연산에는 데이터 레이아웃을 활용할 수 있지만 데이터 및 변환에 대한 설명은 데이터 컨테이너가 아닙니다. 따라서 조금 단순화하는 것은 explode이며 Dataset[Row]에있는 또 다른 flatMap입니다.

+0

고마워요! 내 질문은 기술적으로 데이터 프레임에 관한 것이었지만, 나는 그것이 거의 같다고 추측하고있다. 여기에 [이 예제가 있습니다.] (https://github.com/apache/spark/blob/v2.0.0-rc1/sql/core/src/main/scala/org/apache/spark/sql/Dataset.scala# L1587-L1604)를 Dataset.scala 소스에서 가져옵니다. – hillel

+1

'DataFrame'은'Dataset [Row]'입니다. – zero323

관련 문제