다음을 통해 공유


SparkR 개요

SparkR은 R에서 Apache Spark를 사용하는 경량 프런트 엔드를 제공하는 R 패키지입니다. SparkR은 MLlib를 사용하는 분산 기계 학습도 지원합니다.

SparkR 함수 참조

spark.apache.org에서 최신 SparkR 함수 참조를 찾을 수 있습니다.

또한 SparkR 패키지를 가져온 후 R Notebook 또는 RStudio에서 함수 도움말을 볼 수도 있습니다.

포함된 R 설명서

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.frameSparkDataFrame으로 변환하는 것입니다. 특히 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 및 테이블 작업을 참조하세요.