중간 결과 저장하기
1장에서 보셨듯이 R과 Spark 사이에서 데이터를 복사하는 작업은 근본적으로 느립니다. 즉, 이전 연습 문제에서처럼 데이터를 수집하는 작업은 정말로 필요할 때만 해야 합니다.
파이프 연산자는 데이터 조작 명령을 연결할 때 매우 유용하지만, 일반적으로 모든 단계를 한 줄로만 묶어서 전체 분석을 끝낼 수는 없습니다. 예를 들어, 아래처럼 작성하는 것은 디버깅이 거의 불가능하므로 좋지 않은 관행입니다.
final_results <- starting_data %>%
# 743개의 단계가 파이프로 연결됨
# ... %>%
collect()
여기서 딜레마가 생깁니다. 중간 계산 결과를 저장할 필요는 있지만, 느리기 때문에 collect()로 가져오고 싶지는 않습니다. 해결책은 compute()를 사용해 계산은 수행하되, 결과를 Spark의 임시 데이터 프레임에 저장하는 것입니다. compute()는 두 개의 인수를 받습니다. 하나는 티블(tibble), 다른 하나는 결과를 저장할 Spark 데이터 프레임의 이름입니다.
a_tibble %>%
# 일부 계산 %>%
compute("intermediate_results")
이 연습은 강의의 일부입니다
R에서 sparklyr로 시작하는 Spark
연습 안내
Spark 연결 spark_conn이(가) 준비되어 있습니다. Spark에 저장된 트랙 메타데이터에 연결된 티블 track_metadata_tbl도 미리 정의되어 있습니다.
track_metadata_tbl에서artist_familiarity가 0.8보다 큰 행만 필터링하세요.compute()를 사용해 결과를 계산하세요.- 결과를
"familiar_artists"라는 이름의 Spark 데이터 프레임에 저장하세요. - 반환값을 R 티블
computed에 할당하세요.
- 결과를
src_tbls()를 사용해 사용 가능한 Spark 데이터셋을 확인하세요.computed의class()를 출력하세요.collect()와 달리compute()는 원격 티블을 반환합니다. 데이터는 여전히 Spark 클러스터에 저장되어 있습니다.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# track_metadata_tbl has been pre-defined
track_metadata_tbl
computed <- track_metadata_tbl %>%
# Filter where artist familiarity is greater than 0.8
___ %>%
# Compute the results
___
# See the available datasets
___
# Examine the class of the computed results
___