더북(TheBook)

cube 함수는 rollup 함수 결과에 나머지 부분 집계 결과들(포스트 유형별, 관련 태그별, 포스트 유형 및 관련 태그별, 포스트 유형 및 작성자별)을 추가한다. 지면 관계상 cube 함수 결과는 생략하지만, 책의 깃허브 저장소에 있는 ch05/scala/ch05-listings.scala 파일을 참고해 각자 스파크 셸에서 실습해 보자.

Note 스파크 SQL을 설정하는 방법

DataFrame DSL이나 SQL 커맨드를 적절히 사용하려면 스파크 SQL을 설정하는 방법도 알아 둘 필요가 있다. 스파크의 일반적인 설정 방법은 10장에서 자세히 다룬다. 스파크의 주요 환경 설정 변수들은 런타임에 변경할 수 없지만, 스파크 SQL의 환경 설정 변수는 런타임에도 변경할 수 있다. 스파크 SQL은 DataFrame 연산과 SQL 명령의 실행을 설정할 수 있는 별도의 매개변수를 제공한다.

스파크 SQL의 매개변수는 SQL의 SET 명령(SET <parameter_name>=<parameter_value>)을 사용하거나 SparkSessionconf 필드로 제공되는 RuntimeConfig 객체의 set 메서드를 호출해 지정한다. set 메서드에는 매개변수 이름과 값(String, Boolean, Long 타입의 값)을 전달한다. 따라서 다음 두 줄의 결과는 동일하다.

spark.sql("SET spark.sql.caseSensitive=true")
spark.conf.set("spark.sql.caseSensitive", "true")

참고로 spark.sql.caseSensitive 매개변수는 스파크 SQL 쿼리가 테이블 및 칼럼 이름의 대·소문자를 구별할지 여부를 지정한다. 하이브는 기본적으로 대·소문자를 구별할 수 없지만 스파크 SQL은 가능하며, 하이브 기능을 지원하는 스파크도 대·소문자를 구별한다.

추가로 spark.sql.eagerAnalysis 환경 매개변수도 알아 두자. 이 매개변수는 스파크가 DataFrame 표현식을 적극적으로 평가할지 여부를 지정한다. 이 값을 true로 설정하면 DataFrame에 없는 칼럼을 참조하는 즉시 예외가 발생한다. 반대로 이 값을 false로 설정하면, 스파크는 표현식을 즉시 평가하지 않고 DataFrame 결과를 가져올 행동 연산자를 실행할 때까지 기다린다.

이 장 나머지 부분에서도 스파크 SQL의 주요 매개변수를 일부 설명한다.

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