SparkR 1.6 の概要SparkR 1.6 Overview

注意

最新の SparkR ライブラリの詳細については、 Rを参照してください。For information about the latest SparkR library, see the R.

SparkR は、r から Apache Spark を使用するための軽量フロントエンドを提供する R パッケージです。 Spark 1.5.1 以降、SparkR は、選択、フィルター処理、集計などの操作 (R データに似ています) をサポートする分散データフレーム実装を提供します。フレームと dplyr) ですが、大規模なデータセットでは、SparkR is an R package that provides a light-weight frontend to use Apache Spark from R. Starting with Spark 1.5.1, SparkR provides a distributed DataFrame implementation that supports operations like selection, filtering, and aggregation (similar to R data frames and dplyr) but on large datasets. SparkR は、MLlib を使用した分散機械学習もサポートしています。SparkR also supports distributed machine learning using MLlib.

SparkR DataFrames 作成Creating SparkR DataFrames

アプリケーションでは、ローカルの R データフレーム、データソース、または Spark SQL クエリを使用して、DataFrames を作成できます。Applications can create DataFrames from a local R data frame, from data sources, or using Spark SQL queries.

データフレームを作成する最も簡単な方法は、ローカルの R データフレームを SparkR データフレームに変換することです。The simplest way to create a DataFrame is to convert a local R data frame into a SparkR DataFrame. 具体的には、create a データフレームを使用してローカルの R データフレームを渡し、SparkR データフレームを作成します。Specifically we can use create a DataFrame and pass in the local R data frame to create a SparkR DataFrame. 例として、次のセルは、R の忠実データセットを使用してデータフレームを作成します。As an example, the following cell creates a DataFrame using the faithful dataset from R.

df <- createDataFrame(sqlContext, faithful)

# Displays the content of the DataFrame to stdout
head(df)

Spark SQL を使用したデータソースからFrom data sources using Spark SQL

データソースから DataFrames 作成するための一般的な方法は、「df」です。The general method for creating DataFrames from data sources is read.df. このメソッドでは、SQLContext、読み込むファイルのパス、およびデータソースの種類が使用されます。This method takes in the SQLContext, the path for the file to load and the type of data source. SparkR は、JSON と Parquet ファイルをネイティブで読み取り、Spark パッケージを使用して、CSV や Avro などの一般的なファイル形式のデータソースコネクタを見つけることができます。SparkR supports reading JSON and Parquet files natively and through Spark Packages you can find data source connectors for popular file formats like CSV and Avro.

%fs rm dbfs:/tmp/people.json
%fs put dbfs:/tmp/people.json
'{"age": 10, "name": "John"}
{"age": 20, "name": "Jane"}
{"age": 30, "name": "Andy"}'
people <- read.df(sqlContext, "dbfs:/tmp/people.json", source="json")

SparkR は、JSON ファイルからスキーマを自動的に推測します。SparkR automatically infers the schema from the JSON file.

printSchema(people)
display(people)

Spark パッケージでのデータソースコネクタの使用Using data source connectors with Spark Packages

例として、Spark CSV パッケージを使用して CSV ファイルを読み込みます。As an example, we will use the Spark CSV package to load a CSV file. Spark パッケージの一覧については、ここ Databricks を参照してください。You can find a list of Spark Packages by Databricks here.

diamonds <- read.df(sqlContext, "/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv",
                    source = "com.databricks.spark.csv", header="true", inferSchema = "true")
head(diamonds)

また、データソース API を使用して、DataFrames を複数のファイル形式に保存することもできます。The data sources API can also be used to save out DataFrames into multiple file formats. たとえば、データフレームを使用して、前の例のを Parquet ファイルに保存できます。For example we can save the DataFrame from the previous example to a Parquet file using write.df

%fs rm -r dbfs:/tmp/people.parquet
write.df(people, path="dbfs:/tmp/people.parquet", source="parquet", mode="overwrite")
%fs ls dbfs:/tmp/people.parquet

Spark SQL クエリからFrom Spark SQL queries

Spark SQL クエリを使用して、SparkR DataFrames を作成することもできます。You can also create SparkR DataFrames using Spark SQL queries.

# Register earlier df as temp table
registerTempTable(people, "peopleTemp")
# Create a df consisting of only the 'age' column using a Spark SQL query
age <- sql(sqlContext, "SELECT age FROM peopleTemp")
head(age)
# Resulting df is a SparkR df
str(age)

データフレーム操作DataFrame operations

SparkR DataFrames は、構造化されたデータ処理を実行するための多数の関数をサポートしています。SparkR DataFrames support a number of functions to do structured data processing. ここでは、基本的な例をいくつか紹介します。完全な一覧については、 API のドキュメントを参照してください。Here we include some basic examples and a complete list can be found in the API docs.

行と列の選択Selecting rows and columns

# Create DataFrame
df <- createDataFrame(sqlContext, faithful)
df
# 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))

グループ化と集計Grouping and aggregation

SparkR DataFrames は、グループ化後にデータを集計するためによく使用される多数の関数をサポートしています。SparkR DataFrames support a number of commonly used functions to aggregate data after grouping. たとえば、忠実データセットに各待機時間が表示される回数をカウントできます。For example we can count the number of times each waiting time appears in the faithful dataset.

head(count(groupBy(df, df$waiting)))
# We 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)))

列の操作Column operations

SparkR には、データ処理と集計のために列に直接適用できる多数の関数が用意されています。SparkR provides a number of functions that can be directly applied to columns for data processing and aggregation. 次の例では、基本的な算術関数の使用方法を示しています。The example below shows the use of basic arithmetic functions.

# 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)

Machine learningMachine learning

Spark 1.5 の場合、SparkR では、glm () 関数を使用して、SparkR DataFrames の一般化された線形モデルを調整できます。As of Spark 1.5, SparkR allows the fitting of generalized linear models over SparkR DataFrames using the glm() function. 内部的には、SparkR が MLlib を使用して、指定されたファミリのモデルをトレーニングします。Under the hood, SparkR uses MLlib to train a model of the specified family. ' ~ '、'. '、' + '、'-' など、モデルの継ぎ手に使用できる R 式の演算子のサブセットをサポートしています。We support a subset of the available R formula operators for model fitting, including ‘~’, ‘.’, ‘+’, and ‘-‘.

内部的には、SparkR がカテゴリ特徴のワンホットエンコーディングを自動的に実行して、手動で行う必要がないようにします。Under the hood, SparkR automatically performs one-hot encoding of categorical features so that it does not need to be done manually. 他の MLlib コンポーネントとの互換性のために、文字列と Double 型の機能に加えて、MLlib Vector の特徴に合わせることもできます。Beyond String and Double type features, it is also possible to fit over MLlib Vector features, for compatibility with other MLlib components.

次の例では、SparkR を使用してガウス GLM モデルを構築する方法を示しています。The example below shows the use of building a gaussian GLM model using SparkR. 線形回帰を実行するには、[ファミリ] を "ガウス" に設定します。To run Linear Regression, set family to “gaussian”. ロジスティック回帰を実行するには、ファミリを "二項分布" に設定します。To run Logistic Regression, set family to “binomial”.

# Create the DataFrame
df <- createDataFrame(sqlContext, 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)

ローカル R データフレームから SparkR Datafrstatへの変換Converting local R data frames to SparkR DataFrames

createDataFrame を使用して、ローカルの R データフレームを SparkR Datafrstatに変換できます。You can use createDataFrame to convert local R data frames to SparkR DataFrames.

# Create SparkR DataFrame using localDF
convertedSparkDF <- createDataFrame(sqlContext, localDF)
str(convertedSparkDF)
# Another example: Create SparkR DataFrame with a local R data frame
anotherSparkDF <- createDataFrame(sqlContext, data.frame(surname = c("Tukey", "Venables", "Tierney", "Ripley", "McNeil"),
                                                         nationality = c("US", "Australia", "US", "UK", "Australia"),
                                                         deceased = c("yes", rep("no", 4))))
count(anotherSparkDF)