더북(TheBook)

5.1.2.1 칼럼 선택

대부분의 DataFrame DSL 함수는 Column 객체를 입력받을 수 있다. 예를 들어 특정 칼럼을 선택하는 select 함수는 여러 칼럼 이름 또는 Column 객체를 받고 이 칼럼만으로 구성된 새로운 DataFrame을 반환한다. 다음 코드를 살펴보자(편의상 앞서 생성한 DataFrame의 변수 이름을 짧게 줄여서 사용했다).

scala> val postsDf = itPostsDFStruct
scala> val postsIdBody = postsDf.select("id", "body")
postsIdBody: org.apache.spark.sql.DataFrame = [id: bigint, body: string]

 

Column 객체는 다양한 방법으로 생성할 수 있다. 먼저 다음과 같이 DataFrame 객체의 col 함수를 호출할 수 있다.

val postsIdBody = postsDf.select(postsDf.col("id"), postsDf.col("body"))

 

또는 5.1.1절에서 임포트한 SparkSession.implicits 객체의 암시적 메서드를 사용할 수도 있다. implicits 객체의 symbolToColumn 메서드는 스칼라의 Symbol 클래스를 Column으로 변환한다. 스칼라의 Symbol에는 인터닝(interning)개념(객체의 인스턴스를 단 한 개만 생성하는 기능)이 적용되어 있기 때문에 두 Symbol 객체의 동일 여부를 손쉽게 검사할 수 있다. 이러한 장점 덕분에 스칼라 프로그램에서는 식별자(identifier)를 구현할 때 문자열 대신 Symbol을 자주 사용한다. Symbol 객체는 따옴표 문자나 스칼라의 apply 함수로 초기화할 수 있다. 예를 들어 다음 두 줄은 같은 결과를 반환한다.3

val postsIdBody = postsDf.select(Symbol("id"), Symbol("body"))
val postsIdBody = postsDf.select('id, 'body)

 

3 역주 예제 코드는 apply 함수를 직접 호출하지 않았다. 그 대신 Symbol("id")를 호출하면 Symbol 내부에서 idapply 함수에 전달한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.