정렬(sorting) vs. 배열(arranging)
이 장에서는 지금까지 Spark의 MLlib에 있는 일부 feature transformation 함수들을 살펴봤습니다. sparklyr는 Spark DataFrame API를 활용하는 함수들도 제공합니다.
tibble을 정렬하는 dplyr 방식은 arrange()를 사용하는 것입니다. 또한 Spark의 DataFrame API를 이용해 sdf_sort()로도 tibble을 정렬할 수 있습니다. 이 함수는 정렬할 열 이름의 문자 벡터를 받고, 현재는 오름차순 정렬만 지원합니다.
예를 들어, 열 x를 기준으로 정렬하고(동률일 경우) y, 그다음 z 순서로 정렬하려면 아래 코드처럼 dplyr 방식과 Spark DataFrame 방식을 비교할 수 있습니다.
a_tibble %>%
arrange(x, y, z)
a_tibble %>%
sdf_sort(c("x", "y", "z"))
어떤 방법이 더 빠른지 확인하려면 arrange()와 sdf_sort()를 모두 사용해 보세요. 같은 이름의 패키지에 들어 있는 microbenchmark()로 코드를 감싸면 실행 시간을 확인할 수 있습니다.
microbenchmark({
# your code
})
코드 속도 프로파일링에 대해서는 Writing Efficient R Code 강의에서 더 자세히 배울 수 있습니다.
이 연습은 강의의 일부입니다
R에서 sparklyr로 시작하는 Spark
연습 안내
spark_conn으로 Spark 연결이 생성되어 있습니다. Spark에 저장된 트랙 메타데이터에 연결된 tibble track_metadata_tbl이 미리 정의되어 있습니다.
microbenchmark()를 사용해 아래 작업의 실행 시간을 비교하세요.arrange()를 사용해track_metadata_tbl의 행을year, 그다음artist_name, 그다음release, 그다음title순으로 정렬하세요.- 결과를 수집하세요.
- 같은 작업을 이번에는
arrange()대신sdf_sort()를 사용해 수행하세요. 열 이름은 따옴표로 감싸는 것을 잊지 마세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# track_metadata_tbl has been pre-defined
track_metadata_tbl
# Compare timings of arrange() and sdf_sort()
microbenchmark(
arranged = track_metadata_tbl %>%
# Arrange by year, then artist_name, then release, then title
___ %>%
# Collect the result
___,
sorted = track_metadata_tbl %>%
# Sort by year, then artist_name, then release, then title
___ %>%
# Collect the result
___,
times = 5
)