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 article 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.frameFrom a local R data.frame

データフレームを作成する最も簡単な方法は、ローカル R をに変換することです data.frame SparkDataFrameThe 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.

df <- createDataFrame(faithful)

# Displays the content of the DataFrame to stdout

データソース 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.

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

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 file.

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

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

データソース API を使用して、DataFrames を複数のファイル形式に保存することもできます。The data source API can also be used to save DataFrames into multiple file formats. たとえば、を使用して、前の例のデータフレームを Parquet ファイルに保存でき write.df ます。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 view
createOrReplaceTempView(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

# 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 following example 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

機械学習 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 following example shows how to build 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().

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