SparkR の概要
Databricks の SparkR は、Databricks Runtime 16.0 以降では 非推奨とされています 。 Databricks 代わりに Sparklyr を使用することをお勧めします。
SparkRは、RのApache Sparkを使用するための軽量なフロントエンドを提供するRパッケージで、SparkRはMLlibを使用した分散機械学習もサポートしています。
SparkR 関数リファレンス
最新の SparkR 関数リファレンスは、 spark.apache.org。
また、SparkR をインポートした後、R ノートブックまたは RStudio で関数のヘルプを表示することもできます パッケージ。
ノートブックの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.frame
を
SparkDataFrame
。 具体的には、 createDataFrame
を使用してローカルRを渡すことができます
data.frame
を作成して SparkDataFrame
. 他のほとんどのSparkR関数と同様に、 createDataFrame
Spark 2.0 で構文が変更されました。 この例は、以下のコード スニペットで確認できます。その他の例については、「 createデータフレーム」を参照してください。
library(SparkR)
df <- createDataFrame(faithful)
# Displays the content of the DataFrame to stdout
head(df)
データソースAPIの使用
データソースから データフレーム を作成する一般的な方法は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 Packagesを通じて、データソースコネクタを見つけることができます Avroなどの一般的なファイル形式の場合。例として、 spark-avro パッケージ をクリックして Avro ファイルを読み込みます。 spark-avro パッケージを使用できるかどうかは、クラスター のバージョンによって異なります。 Avro ファイルを参照してください。
まず、既存の data.frame
を取得し、Spark データフレーム に変換して、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 は、 データフレーム を保存するためにも使用できます。
複数のファイル形式。 たとえば、データフレーム を
前の例を write.df
を使用して Parquet ファイルに適用します。
write.df(irisDF2, path="dbfs:/tmp/iris.parquet", source="parquet", mode="overwrite")
%fs ls dbfs:/tmp/iris.parquet
Spark SQL クエリから
SparkRデータフレームSpark SQLクエリを使用して を作成することもできます。
# 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
は Sparkデータフレーム です。
データフレーム の操作
Spark データフレーム は、構造化データを実行するための多くの関数をサポートしています 加工。 基本的な例をいくつか示します。 完全なリストは、 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))
グループ化と集計
Sparkデータフレーム は、一般的に使用される多くの関数をサポートしています。 グループ化後にデータを集計します。 たとえば、数を数えることができます。 各待機時間が忠実なデータセットに表示される回数。
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。 線形回帰を実行するには、family を "gaussian"
に設定します。 実行するには
ロジスティック回帰、family を "binomial"
に設定します。 SparkML GLM SparkRを使用する場合
のワンホットエンコーディングを自動的に実行します
カテゴリカル機能であるため、手動で行う必要はありません。文字列型やDouble型の特徴を超えて、
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 での データフレーム とテーブルの操作」を参照してください。