SparkR 개요
SparkR은 R에서 Apache Spark를 사용하는 경량 프런트 엔드를 제공하는 R 패키지입니다. SparkR은 MLlib를 사용하는 분산 기계 학습도 지원합니다.
SparkR 함수 참조
spark.apache.org에서 최신 SparkR 함수 참조를 찾을 수 있습니다.
또한 SparkR 패키지를 가져온 후 R Notebook 또는 RStudio에서 함수 도움말을 볼 수도 있습니다.
Notebooks의 SparkR
- Spark 2.0 이상의 경우
sqlContext
개체를 모든 함수 호출에 명시적으로 전달할 필요가 없습니다. - Spark 2.2 이상의 경우 SparkR 함수가 다른 인기 있는 패키지의 유사한 이름의 함수와 충돌하기 때문에 Notebook은 더 이상 기본적으로 SparkR을 가져오지 않습니다. SparkR을 사용하려면 Notebook에서
library(SparkR)
를 호출할 수 있습니다. SparkR 세션이 이미 구성되어 있으며 모든 SparkR 함수는 기존 세션을 사용하여 연결된 클러스터와 통신합니다.
spark-submit 작업의 SparkR
Azure Databricks에서 SparkR을 사용하는 스크립트를 약간의 코드 수정을 통해 spark-submit 작업으로 실행할 수 있습니다.
SparkR DataFrame 만들기
로컬 R data.frame
, 데이터 원본 또는 Spark SQL 쿼리를 사용하여 DataFrame을 만들 수 있습니다.
로컬 R data.frame
에서
DataFrame을 만드는 가장 간단한 방법은 로컬 R data.frame
을 SparkDataFrame
으로 변환하는 것입니다. 특히 createDataFrame
을 사용하고 로컬 R data.frame
을 전달하여 SparkDataFrame
을 만들 수 있습니다. 대부분의 다른 SparkR 함수와 마찬가지로 Spark 2.0에서 createDataFrame
구문이 변경되었습니다. 아래 코드 조각에서 이 예제를 볼 수 있습니다.
추가 예제는 createDataFrame을 참조하세요.
library(SparkR)
df <- createDataFrame(faithful)
# Displays the content of the DataFrame to stdout
head(df)
데이터 원본 API 사용
데이터 원본에서 DataFrame을 만드는 일반적인 방법은 read.df
입니다.
이 메서드는 로드할 파일의 경로와 데이터 원본의 형식을 사용합니다.
SparkR은 기본적으로 CSV, JSON, 텍스트 및 Parquet 파일 읽기를 지원합니다.
library(SparkR)
diamondsDF <- read.df("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", source = "csv", header="true", inferSchema = "true")
head(diamondsDF)
SparkR은 CSV 파일에서 스키마를 자동으로 유추합니다.
Spark 패키지를 사용하여 데이터 원본 커넥터 추가
Spark 패키지를 통해 Avro와 같은 인기 있는 파일 형식에 대한 데이터 원본 커넥터를 찾을 수 있습니다. 예를 들어 spark-avro 패키지를 사용하여 Avro 파일을 로드합니다. spark-avro 패키지의 가용성은 클러스터의 버전에 따라 달라집니다. Avro 파일을 참조하세요.
먼저 기존 data.frame
을 가져와서 Spark DataFrame으로 변환하고 Avro 파일로 저장합니다.
require(SparkR)
irisDF <- createDataFrame(iris)
write.df(irisDF, source = "com.databricks.spark.avro", path = "dbfs:/tmp/iris.avro", mode = "overwrite")
Avro 파일이 저장되었는지 확인하려면 다음을 수행합니다.
%fs ls /tmp/iris.avro
이제 spark-avro 패키지를 다시 사용하여 데이터를 다시 읽습니다.
irisDF2 <- read.df(path = "/tmp/iris.avro", source = "com.databricks.spark.avro")
head(irisDF2)
데이터 원본 API를 사용하여 DataFrame을 여러 파일 형식으로 저장할 수도 있습니다. 예를 들어 write.df
를 사용하여 이전 예제의 DataFrame을 Parquet 파일에 저장할 수 있습니다.
write.df(irisDF2, path="dbfs:/tmp/iris.parquet", source="parquet", mode="overwrite")
%fs ls dbfs:/tmp/iris.parquet
Spark SQL 쿼리에서
Spark SQL 쿼리를 사용하여 SparkR DataFrame을 만들 수도 있습니다.
# Register earlier df as temp view
createOrReplaceTempView(irisDF2, "irisTemp")
# Create a df consisting of only the 'species' column using a Spark SQL query
species <- sql("SELECT species FROM irisTemp")
species
는 SparkDataFrame입니다.
DataFrame 작업
Spark DataFrame은 구조화된 데이터 처리를 수행하는 여러 함수를 지원합니다. 다음은 몇 가지 기본적인 예입니다. 전체 목록은 API 문서에서 확인할 수 있습니다.
행 및 열 선택
# Import SparkR package if this is a new notebook
require(SparkR)
# Create DataFrame
df <- createDataFrame(faithful)
# Select only the "eruptions" column
head(select(df, df$eruptions))
# You can also pass in column name as strings
head(select(df, "eruptions"))
# Filter the DataFrame to only retain rows with wait times shorter than 50 mins
head(filter(df, df$waiting < 50))
그룹화 및 집계
SparkDataFrames는 그룹화 후 데이터를 집계하는 데 일반적으로 사용되는 여러 함수를 지원합니다. 예를 들어 각 대기 시간이 충실한 데이터 세트에 표시되는 횟수를 계산할 수 있습니다.
head(count(groupBy(df, df$waiting)))
# You can also sort the output from the aggregation to get the most common waiting times
waiting_counts <- count(groupBy(df, df$waiting))
head(arrange(waiting_counts, desc(waiting_counts$count)))
열 작업
SparkR은 데이터 처리 및 집계를 위해 열에 직접 적용할 수 있는 여러 함수를 제공합니다. 다음 예제에서는 기본적인 산술 함수의 사용법을 보여 줍니다.
# Convert waiting time from hours to seconds.
# You can assign this to a new column in the same DataFrame
df$waiting_secs <- df$waiting * 60
head(df)
기계 학습
SparkR은 대부분의 MLLib 알고리즘을 노출합니다. 내부적으로 SparkR은 MLlib를 사용하여 모델을 학습합니다.
다음 예제에서는 SparkR을 사용하여 가우스 GLM 모델을 빌드하는 방법을 보여 줍니다. 선형 회귀를 실행하려면 패밀리를 "gaussian"
로 설정합니다. 로지스틱 회귀를 실행하려면 패밀리를 "binomial"
로 설정합니다. SparkML GLM SparkR을 사용하는 경우 수동으로 수행할 필요가 없도록 범주 기능의 원 핫 인코딩을 자동으로 수행합니다.
문자열 및 이중 형식 기능 외에도 다른 MLlib 구성 요소와의 호환성을 위해 MLlib 벡터 기능에 맞출 수도 있습니다.
# Create the DataFrame
df <- createDataFrame(iris)
# Fit a linear model over the dataset.
model <- glm(Sepal_Length ~ Sepal_Width + Species, data = df, family = "gaussian")
# Model coefficients are returned in a similar format to R's native glm().
summary(model)
자습서는 자습서: glm을 사용하여 데이터 분석을 참조 하세요.
추가 예는 R에서 DataFrame 및 테이블 작업을 참조하세요.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기