SparkR の概要SparkR Overview

SparkR は、R から Apache Spark を使用するための軽量フロントエンドを提供する R パッケージです。 SparkR は、MLlib を使用した分散機械学習もサポートしています。SparkR is an R package that provides a light-weight frontend to use Apache Spark from R. SparkR also supports distributed machine learning using MLlib.

Notebook の SparkRSparkR in notebooks

  • Spark 2.0 以降では、sqlContext オブジェクトをすべての関数呼び出しに明示的に渡す必要はありません。For Spark 2.0 and above, you do not need to explicitly pass a sqlContext object to every function call. このトピックでは、新しい構文を使用します。This topic uses the new syntax. 古い構文の例については、「 SparkR 1.6 の概要」を参照してください。For old syntax examples, see SparkR 1.6 Overview.
  • Spark 2.2 以降では、SparkR 関数は、他の一般的なパッケージと同様の名前の関数と競合しているため、既定ではノートブックは SparkR をインポートしなくなりました。For Spark 2.2 and above, notebooks no longer import SparkR by default because SparkR functions were conflicting with similarly named functions from other popular packages. SparkR を使用するには、ノートブックで library(SparkR) を呼び出すことができます。To use SparkR you can call library(SparkR) in your notebooks. SparkR セッションは既に構成されており、すべての SparkR 関数は、既存のセッションを使用して接続されたクラスターと通信します。The SparkR session is already configured, and all SparkR functions will talk to your attached cluster using the existing session.

Spark での SparkR ジョブの送信SparkR in spark-submit jobs

Azure Databricks で SparkR を使用するスクリプトを spark submit ジョブとして実行し、コードを変更することができます。You can run scripts that use SparkR on Azure Databricks as spark-submit jobs, with minor code modifications. 例については、「 R スクリプト用の spark 送信ジョブの作成と実行」を参照してください。For an example, refer to Create and run a spark-submit job for R scripts.

SparkR DataFrames 作成Create SparkR DataFrames

データフレームは、ローカルの R data.frame、データソース、または Spark SQL クエリを使用して作成できます。You can create a DataFrame from a local R data.frame, from a data source, or using a Spark SQL query.

ローカル R data.frame からFrom a local R data.frame

データフレームを作成する最も簡単な方法は、ローカルの R data.frameSparkDataFrame に変換することです。The simplest way to create a DataFrame is to convert a local R data.frame into a SparkDataFrame. 具体的には、createDataFrame を使用し、ローカルの R data.frame を渡して SparkDataFrame を作成できます。Specifically we can use createDataFrame and pass in the local R data.frame to create a SparkDataFrame. 他のほとんどの SparkR 関数と同様に、createDataFrame 構文は Spark 2.0 で変更されました。Like most other SparkR functions, createDataFrame syntax changed in Spark 2.0. この例については、コードスニペットベルを参照してください。You can see examples of this in the code snippet bellow. その他の例については、 createDataFrameを参照してください。Refer to createDataFrame for more examples.

library(SparkR)
df <- createDataFrame(faithful)

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

データソース API の使用Using the data source API

データソースからデータフレームを作成するための一般的な方法は read.df です。The general method for creating a DataFrame from a data source is read.df. このメソッドは、読み込むファイルのパスとデータソースの種類を取得します。This method takes the path for the file to load and the type of data source. SparkR では、CSV、JSON、text、Parquet の各ファイルをネイティブに読み取ることができます。SparkR supports reading CSV, JSON, text, and Parquet files natively.

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

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

Spark パッケージを使用したデータソースコネクタの追加Adding a data source connector with Spark Packages

Spark パッケージを使用して、Avro などの一般的なファイル形式のデータソースコネクタを見つけることができます。Through Spark Packages you can find data source connectors for popular file formats such as Avro. 例として、 spark avro パッケージを使用してavroファイルを読み込みます。As an example, use the spark-avro package to load an Avro file. Spark avro パッケージの可用性は、クラスターのイメージバージョンによって異なります。The availability of the spark-avro package depends on your cluster’s image version. Avro ファイルを参照してください。See Avro Files.

まず既存の data.frame を取得し、Spark データフレームに変換して、Avro ファイルとして保存します。First take an existing data.frame, convert to a Spark DataFrame, and save it as an Avro file.

require(SparkR)
irisDF <- createDataFrame(iris)
write.df(irisDF, source = "com.databricks.spark.avro", path = "dbfs:/tmp/iris.avro", mode = "overwrite")

Avro ファイルが保存されたことを確認するには、次のようにします。To verify that an Avro file was saved:

%fs ls /tmp/iris

次に、spark avro パッケージをもう一度使用して、データを読み取ります。Now use the spark-avro package again to read back the data.

irisDF2 <- read.df(path = "/tmp/iris.avro", source = "com.databricks.spark.avro")
head(irisDF2)

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

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

Spark SQL クエリからFrom a Spark SQL query

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("SELECT age FROM peopleTemp")

age は SparkDataFrame です。age is a SparkDataFrame.

データフレーム操作DataFrame operations

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

行と列の選択Select rows and columns

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

グループ化と集計Grouping and aggregation

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

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

列の操作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 learning

SparkR では、ほとんどの MLLib アルゴリズムが公開されています。SparkR exposes most of MLLib algorithms. 内部的には、SparkR が MLlib を使用してモデルをトレーニングします。Under the hood, SparkR uses MLlib to train the model.

次の例では、SparkR を使用してガウス GLM モデルを構築する方法を示しています。The example below shows the use of building a gaussian GLM model using SparkR. 線形回帰を実行するには、[ファミリ] を "gaussian" に設定します。To run linear regression, set family to "gaussian". ロジスティック回帰を実行するには、[ファミリ] を "binomial" に設定します。To run logistic regression, set family to "binomial". SparkML GLM SparkR を使用すると、カテゴリ特徴のワンホットエンコードが自動的に実行されるため、手動で行う必要はありません。When using SparkML GLM 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.

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

チュートリアルについては、「 SPARKR ML チュートリアル」を参照してください。For tutorials, see SparkR ML Tutorials.