1. 学ぶ
  2. /
  3. コース
  4. /
  5. R에서 sparklyr로 시작하는 Spark

Connected

演習

고급 선택 II: SQL

앞에서 말씀드렸듯이 dplyr 인터페이스를 사용하면 sparklyr가 코드를 Spark로 전달하기 전에 SQL로 변환합니다. 대부분의 경우 이렇게 하는 것이 바람직합니다. 하지만 같은 작업을 수행하기 위해 원시 SQL을 직접 작성할 수도 있습니다. 대체로 코드를 쓰기도, 디버깅하기도 더 어려워 비효율적이지만, 코드의 이식성—즉 R 밖의 환경에서도 사용할 수 있도록—이 필요하다면 도움이 됩니다. 예를 들어 비교적 흔한 워크플로는 sparklyr로 데이터 처리 방식을 실험한 뒤, 운영 환경에서는 원시 SQL로 전환하는 것입니다. 처음부터 원시 SQL로 작성해 두면 운영으로 옮길 때 쿼리를 복사해 붙여넣기만 하면 됩니다.

SQL 쿼리는 문자열로 작성한 뒤 DBI 패키지의 dbGetQuery()에 전달합니다. 형태는 다음과 같습니다.

query <- "SELECT col1, col2 FROM some_data WHERE some_condition"
a_data.frame <- dbGetQuery(spark_conn, query)

지금까지 작성한 dplyr 코드와 달리, dbGetQuery()는 항상 쿼리를 즉시 실행하고 결과를 곧바로 R로 반환한다는 점에 유의하세요. 데이터를 나중에 가져오고 싶다면 dbSendQuery()로 쿼리를 실행한 뒤 dbFetch()로 결과를 가져올 수 있습니다. 이는 더 고급 사용법이므로 여기서는 다루지 않습니다. 또한 DBI 함수는 tibble이 아닌 data.frame을 반환합니다. DBI가 더 하위 수준의 패키지이기 때문입니다.

SQL 코드를 더 배우고 싶다면 Introduction to SQL 강의를 수강해 보세요.

指示

100 XP

spark_conn으로 Spark 연결이 생성되어 있습니다. Spark에 저장된 트랙 메타데이터에 연결된 티블 track_metadata_tbl이 미리 정의되어 있으며, SQL 쿼리에서는 track_metadata로 접근할 수 있습니다.

  • track_metadata Spark 데이터 프레임에서 year가 1935보다 작고 duration이 300초보다 큰 행의 모든 열을 선택하도록 쿼리를 완성하세요.
  • dbGetQuery()를 호출해 쿼리를 실행하고 결과를 results에 할당한 뒤, 출력 내용을 확인하세요.