メインコンテンツまでスキップ

SparkR の概要

important

Databricks の SparkR は、Databricks Runtime 16.0 以降では 非推奨とされています 。 Databricks 代わりに Sparklyr を使用することをお勧めします。

SparkRは、RのApache Sparkを使用するための軽量なフロントエンドを提供するRパッケージで、SparkRはMLlibを使用した分散機械学習もサポートしています。

SparkR 関数リファレンス

最新の SparkR 関数リファレンスは、 spark.apache.org

また、SparkR をインポートした後、R ノートブックまたは RStudio で関数のヘルプを表示することもできます パッケージ。

Embedded R のドキュメンテーション

ノートブックのSparkR

  • Spark 2.0 以降では、すべての関数呼び出しに sqlContext オブジェクトを明示的に渡す必要はありません。
  • Spark 2.2 以降では、SparkR 関数が他の一般的なパッケージの同様の名前の関数と競合していたため、ノートブックは SparkR をデフォルトでインポートしなくなりました。 SparkR を使用するには、ノートブックで library(SparkR) 呼び出します。 SparkR セッションは既に構成されており、すべての SparkR 関数は、既存のセッションを使用してアタッチされたクラスターと通信します。

spark-submit ジョブの SparkR

Databricks で SparkR を使用するスクリプトは、コードを少し変更するだけで、spark-submit ジョブとして実行できます。

SparkR データフレーム の作成

データフレームは、ローカルの R data.frame、データソース、または Spark SQL クエリを使用して作成できます。

地元のRから data.frame

データフレーム を作成する最も簡単な方法は、ローカルの R data.frameSparkDataFrame。 具体的には、 createDataFrame を使用してローカルRを渡すことができます data.frame を作成して SparkDataFrame. 他のほとんどのSparkR関数と同様に、 createDataFrame Spark 2.0 で構文が変更されました。 この例は、以下のコード スニペットで確認できます。その他の例については、「 createデータフレーム」を参照してください。

R
library(SparkR)
df <- createDataFrame(faithful)

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

データソースAPIの使用

データソースから データフレーム を作成する一般的な方法はread.dfです。このメソッドは、ロードするファイルのパスとデータソースのタイプを取ります。SparkR は、CSV、JSON、テキスト、Parquet ファイルの読み取りをサポートしています ネイティブ。

R
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 Packagesを通じて、データソースコネクタを見つけることができます Avroなどの一般的なファイル形式の場合。例として、 spark-avro パッケージ をクリックして Avro ファイルを読み込みます。 spark-avro パッケージを使用できるかどうかは、クラスター のバージョンによって異なります。 Avro ファイルを参照してください。

まず、既存の data.frameを取得し、Spark データフレーム に変換して、Avro ファイルとして保存します。

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

Avro ファイルが保存されたことを確認するには、次のようにします。

R
%fs ls /tmp/iris.avro

次に、spark-avro パッケージを再度使用して、データを読み戻します。

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

データソース API は、 データフレーム を保存するためにも使用できます。 複数のファイル形式。 たとえば、データフレーム を 前の例を write.dfを使用して Parquet ファイルに適用します。

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

Spark SQL クエリから

SparkRデータフレームSpark SQLクエリを使用して を作成することもできます。

R
# Register earlier df as temp view
createOrReplaceTempView(irisDF2, "irisTemp")
R
# Create a df consisting of only the 'species' column using a Spark SQL query
species <- sql("SELECT species FROM irisTemp")

species は Sparkデータフレーム です。

データフレーム の操作

Spark データフレーム は、構造化データを実行するための多くの関数をサポートしています 加工。 基本的な例をいくつか示します。 完全なリストは、 APIドキュメントにあります。

行と列の選択

R
# Import SparkR package if this is a new notebook
require(SparkR)

# Create DataFrame
df <- createDataFrame(faithful)
R
# Select only the "eruptions" column
head(select(df, df$eruptions))
R
# You can also pass in column name as strings
head(select(df, "eruptions"))
R
# Filter the DataFrame to only retain rows with wait times shorter than 50 mins
head(filter(df, df$waiting < 50))

グループ化と集計

Sparkデータフレーム は、一般的に使用される多くの関数をサポートしています。 グループ化後にデータを集計します。 たとえば、数を数えることができます。 各待機時間が忠実なデータセットに表示される回数。

R
head(count(groupBy(df, df$waiting)))
R
# 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は、直接適用できる多くの関数を提供します データ処理と集計用の列。 次の例は、 基本的な算術関数の使用。

R
# 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。 線形回帰を実行するには、family を "gaussian"に設定します。 実行するには ロジスティック回帰、family を "binomial"に設定します。 SparkML GLM SparkRを使用する場合 のワンホットエンコーディングを自動的に実行します カテゴリカル機能であるため、手動で行う必要はありません。文字列型やDouble型の特徴を超えて、 MLlib ベクター機能、他の MLlib コンポーネントとの互換性のために。

R
# 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 での データフレーム とテーブルの操作」を参照してください。