sparklyr 사용
sparklyr은 Apache Spark에 대한 R 인터페이스입니다. 익숙한 R 인터페이스를 사용하여 Spark와 상호 작용하는 메커니즘을 제공합니다. Spark 일괄 처리 작업 정의를 통해 또는 대화형 Microsoft Fabric Notebook으로 sparklyr를 사용할 수 있습니다.
sparklyr
은 dplyr과 같은 다른 tidyverse 패키지와 함께 사용됩니다. Azure Databricks는 모든 런타임 릴리스와 함께 최신 안정 버전의 sparklyr과 tidyverse를 배포합니다. 이를 가져와서 API 사용을 시작할 수 있습니다.
필수 조건
Microsoft Fabric 구독을 구매합니다. 또는 무료 Microsoft Fabric 평가판에 등록합니다.
Microsoft Fabric에 로그인합니다.
홈페이지 왼쪽의 환경 전환기를 사용하여 Synapse 데이터 과학 환경으로 전환합니다.
Notebook을 열거나 만듭니다. 방법을 알아보려면 Microsoft Fabric Notebook 사용 방법을 참조하세요.
언어 옵션을 SparkR(R)로 설정하여 기본 언어를 변경합니다.
레이크하우스에 Notebook을 연결합니다. 왼쪽에서 추가를 선택하여 기존 레이크하우스를 추가하거나 레이크하우스를 만듭니다.
sparklyr을 Synapse Spark 클러스터에 연결
spark_connect()
연결을 설정하려면 sparklyr
에서 다음 연결 메서드를 사용하면 됩니다. 기존 Spark 세션에 연결할 수 있는 synapse
라는 새 연결 메서드를 지원합니다. sparklyr
세션 시작 시간을 획기적으로 단축합니다. 또한 이 연결 방법을 오픈 소스 sparklyr 프로젝트에 기여했습니다. method = "synapse"
를 사용하면 sparklyr
및 SparkR
을 동일한 세션에서 모두 사용할 수 있으며 두 세션 간에 데이터를 쉽게 공유할 수 있습니다.
# connect sparklyr to your spark cluster
spark_version <- sparkR.version()
config <- spark_config()
sc <- spark_connect(master = "yarn", version = spark_version, spark_home = "/opt/spark", method = "synapse", config = config)
sparklyr를 사용하여 데이터 읽기
새 Spark 세션에는 데이터가 없습니다. 첫 번째 단계는 Spark 세션의 메모리에 데이터를 로드하거나 Spark에 데이터 위치를 알려서 필요할 때 액세스할 수 있도록 하는 것입니다.
# load the sparklyr package
library(sparklyr)
# copy data from R environment to the Spark session's memory
mtcars_tbl <- copy_to(sc, mtcars, "spark_mtcars", overwrite = TRUE)
head(mtcars_tbl)
sparklyr
을 사용하면 ABFS 경로를 사용하여 레이크하우스 파일에서 데이터를 write
및 read
할 수도 있습니다. 레이크하우스를 읽고 쓰려면 먼저 세션에 추가해야 합니다. Notebook 왼쪽에서 추가를 선택하여 기존 레이크하우스를 추가하거나 레이크하우스를 만듭니다.
ABFS 경로를 찾으려면 레이크하우스의 파일 폴더를 마우스 오른쪽 버튼으로 클릭한 다음, ABFS 경로 복사를 선택합니다. 이 코드에서 abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files
을 대체할 경로를 붙여넣습니다.
temp_csv = "abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files/data/mtcars.csv"
# write the table to your lakehouse using the ABFS path
spark_write_csv(mtcars_tbl, temp_csv, header = TRUE, mode = 'overwrite')
# read the data as CSV from lakehouse using the ABFS path
mtcarsDF <- spark_read_csv(sc, temp_csv)
head(mtcarsDF)
sparklyr를 사용하여 데이터 조작
sparklyr
은 다음을 사용하여 Spark 내에서 데이터를 처리하는 여러 가지 방법을 제공합니다.
dplyr
명령- SparkSQL
- Spark의 기능 변환기
dplyr
사용
친숙한 dplyr
명령을 사용하여 Spark 내에서 데이터를 준비할 수 있습니다. 명령은 Spark 내에서 실행되므로 R과 Spark 간에 불필요한 데이터 전송이 없습니다.
Spark로 dplyr을 사용하는 방법에 대한 추가 설명서를 보려면 dplyr
을 통해 데이터 조작을 클릭합니다.
# count cars by the number of cylinders the engine contains (cyl), order the results descendingly
library(dplyr)
cargroup <- group_by(mtcars_tbl, cyl) %>%
count() %>%
arrange(desc(n))
cargroup
sparklyr
및 dplyr
은 R 명령을 Spark SQL로 변환합니다. 결과 쿼리를 보려면 쿼리 show_query()
를 사용할 수 있습니다.
# show the dplyr commands that are to run against the Spark connection
dplyr::show_query(cargroup)
SQL 사용
Spark 클러스터 내의 테이블에 대해 직접 SQL 쿼리를 실행할 수도 있습니다. spark_connection()
개체는 Spark에 대한 DBI 인터페이스를 구현하므로 dbGetQuery()
를 사용하여 SQL을 실행하고 결과를 R 데이터 프레임으로 반환할 수 있습니다.
library(DBI)
dbGetQuery(sc, "select cyl, count(*) as n from spark_mtcars
GROUP BY cyl
ORDER BY n DESC")
기능 변환기 사용
이전 두 방법은 모두 SQL 문을 사용합니다. Spark는 SQL을 사용하지 않고도 일부 데이터 변환을 보다 편리하게 만드는 명령을 제공합니다.
예를 들어 ft_binarizer()
명령은 다른 열의 값이 특정 임계값을 초과하는지 나타내는 새 열의 생성을 간소화합니다.
sparklyr
을 통해 사용 가능한 Spark 기능 변환기의 전체 목록은 Reference -FT에서 찾을 수 있습니다.
mtcars_tbl %>%
ft_binarizer("mpg", "over_20", threshold = 20) %>%
select(mpg, over_20) %>%
head(5)
sparklyr
과 SparkR
간 데이터 공유
sparklyr
을 method = "synapse"
와 함께 Synapse Spark 클러스터에 연결하면 sparklyr
및 SparkR
을 같은 세션에서 모두 사용하고 두 세션 간에 데이터를 쉽게 공유할 수 있습니다. sparklyr
에서 Spark 테이블을 만들고 SparkR
에서 읽을 수 있습니다.
# load the sparklyr package
library(sparklyr)
# Create table in `sparklyr`
mtcars_sparklyr <- copy_to(sc, df = mtcars, name = "mtcars_tbl", overwrite = TRUE, repartition = 3L)
# Read table from `SparkR`
mtcars_sparklr <- SparkR::sql("select cyl, count(*) as n
from mtcars_tbl
GROUP BY cyl
ORDER BY n DESC")
head(mtcars_sparklr)
기계 학습
다음은 선형 회귀 모델을 맞추는 데 ml_linear_regression()
을 사용하는 예시입니다. 기본 제공 mtcars
데이터 세트를 사용하며, 자동차의 중량(wt
)과 엔진에 포함된 실린더 수(cyl
)를 기반으로 자동차의 연료 소비량(mpg
)을 예측할 수 있는지 확인해 보겠습니다. 각 경우에 mpg
와 각 기능 간의 관계가 선형이라고 가정합니다.
테스트 및 학습 데이터 세트 생성
분할을 사용하여 학습에 70%, 테스트에 30%로 모델을 분할합니다. 이 비율을 변경하면 다양한 모델이 생성됩니다.
# split the dataframe into test and training dataframes
partitions <- mtcars_tbl %>%
select(mpg, wt, cyl) %>%
sdf_random_split(training = 0.7, test = 0.3, seed = 2023)
모델 학습
로지스틱 회귀 분석 모델을 학습합니다.
fit <- partitions$training %>%
ml_linear_regression(mpg ~ .)
fit
이제 summary()
를 사용하여 모델의 품질과 각 예측 변수의 통계적 중요성에 대해 좀 더 자세히 알아봅니다.
summary(fit)
모델 사용
ml_predict()
를 호출하여 테스트 데이터 세트에 모델을 적용할 수 있습니다.
pred <- ml_predict(fit, partitions$test)
head(pred)
sparklyr을 통해 사용 가능한 Spark ML 모델 목록은 Reference - ML을 참조 하세요.
Spark 클러스터에서 연결 끊기
spark_disconnect()
를 호출하거나 Notebook 리본 상단에 있는 세션 중지 버튼을 선택하여 Spark 세션을 종료할 수 있습니다.
spark_disconnect(sc)
관련 콘텐츠
R 기능에 대해 자세히 알아보기: