sparklyr を使用する
sparklyr は、Apache Spark への R インターフェイスです。 使い慣れた R インターフェイスを使用して Spark と対話するメカニズムを提供します。 Spark バッチ ジョブ定義を通じて、または対話型の Microsoft Fabric ノートブックで sparklyr を使用できます。
sparklyr
は、dplyrなどの他の の tidyverse パッケージと共に使用されます。 Microsoft Fabric は、sparklyr と tidyverse の最新の安定したバージョンをランタイム リリースごとに配布します。 それらをインポートし、API の使用を開始できます。
前提 条件
Microsoft Fabric サブスクリプションを取得します。 または、無料でMicrosoft Fabric 試用版に登録する。
Microsoft Fabric にサインインします。
ホーム ページの左下にあるエクスペリエンス スイッチャーを使用して、Fabric に切り替えます。
ノートブックを開くか、または作成する。 方法については、「Microsoft Fabric Notebooksを使用する方法」を参照してください。
言語オプションを SparkR (R) に設定して、プライマリ言語を変更します。
ノートブックをレイクハウスにアタッチします。 左側にある [追加] を選択して、既存のレイクハウスを追加するか、レイクハウスを作成します。
Sparklyr を Synapse Spark クラスターに接続する
sparklyr
接続を確立するには、spark_connect()
で次の接続方法を使用します。 synapse
という新しい接続方法がサポートされています。これにより、既存の Spark セッションに接続できます。 これにより、sparklyr
セッションの開始時刻が大幅に短縮されます。 さらに、この接続方法を、オープン ソースの sparklyr プロジェクト に提供しました。 method = "synapse"
を使用すると、同じセッションで sparklyr
と SparkR
の両方を使用し、それらの間でデータを 簡単に共有できます。
# connect sparklyr to your spark cluster
spark_version <- sparkR.version()
config <- spark_config()
sc <- spark_connect(master = "yarn", version = spark_version, spark_home = "/opt/spark", method = "synapse", config = config)
sparklyr を使用してデータを読み取る
新しい Spark セッションにはデータが含まれていません。 最初の手順は、Spark セッションのメモリにデータを読み込むか、Spark がオンデマンドでデータにアクセスできるようにデータの場所をポイントすることです。
# load the sparklyr package
library(sparklyr)
# copy data from R environment to the Spark session's memory
mtcars_tbl <- copy_to(sc, mtcars, "spark_mtcars", overwrite = TRUE)
head(mtcars_tbl)
sparklyr
を使用すると、ABFS パスを使用して Lakehouse ファイルのデータの write
と read
を行うこともできます。 レイクハウスの読み取りと書き込みを行うには、まずレイクハウスをセッションに追加します。 ノートブックの左側にある [ の追加] を選択して、既存の Lakehouse を追加するか、Lakehouse を作成します。
ABFS パスを見つけるためには、Lakehouse の Files フォルダーを右クリックし、ABFS パスのコピーを選択します。 次のコードの abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files
を置き換えるパスを貼り付けます。
temp_csv = "abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files/data/mtcars.csv"
# write the table to your lakehouse using the ABFS path
spark_write_csv(mtcars_tbl, temp_csv, header = TRUE, mode = 'overwrite')
# read the data as CSV from lakehouse using the ABFS path
mtcarsDF <- spark_read_csv(sc, temp_csv)
head(mtcarsDF)
sparklyr を使用してデータを操作する
sparklyr
では、次を使用して Spark 内のデータを処理する複数の方法を提供します。
dplyr
コマンド- SparkSQL
- Spark のフィーチャー トランスフォーマー
dplyr
を使用する
使い慣れた dplyr
コマンドを使用して、Spark 内でデータを準備できます。 コマンドは Spark 内で実行されるため、R と Spark 間の不要なデータ転送はありません。
dplyr
でデータを操作する をクリックすると、Spark での dplyr の使用に関する追加のドキュメントが表示されます。
# count cars by the number of cylinders the engine contains (cyl), order the results descendingly
library(dplyr)
cargroup <- group_by(mtcars_tbl, cyl) %>%
count() %>%
arrange(desc(n))
cargroup
sparklyr
と dplyr
が R コマンドを Spark SQL に変換してくれます。 結果のクエリを表示するには、show_query()
を使用します。
# show the dplyr commands that are to run against the Spark connection
dplyr::show_query(cargroup)
SQL を使用する
Spark クラスター内のテーブルに対して SQL クエリを直接実行することもできます。 spark_connection()
オブジェクトは Spark 用の DBI インターフェイスを実装するため、dbGetQuery()
を使用して SQL を実行し、結果を R データ フレームとして返すことができます。
library(DBI)
dbGetQuery(sc, "select cyl, count(*) as n from spark_mtcars
GROUP BY cyl
ORDER BY n DESC")
フィーチャー トランスフォーマーを使用する
上記のどちらの方法も SQL ステートメントに依存しています。 Spark には、SQL を使用せずに、いくつかのデータ変換をより便利にするコマンドが用意されています。
たとえば、ft_binarizer()
コマンドを使用すると、別の列の値が特定のしきい値を超えているかどうかを示す新しい列の作成が簡略化されます。
sparklyr
で使用可能な Spark Feature Transformer の完全な一覧については、リファレンス -FTを参照してください。
mtcars_tbl %>%
ft_binarizer("mpg", "over_20", threshold = 20) %>%
select(mpg, over_20) %>%
head(5)
sparklyr
と SparkR
の間でデータを共有する
method = "synapse"
を使用して sparklyr
を Synapse Spark クラスターに接続すると、同じセッションで sparklyr
と SparkR
の両方を使用でき、簡単に両者の間でデータを共有できます。 sparklyr
で Spark テーブルを作成し、SparkR
から読み取ることができます。
# load the sparklyr package
library(sparklyr)
# Create table in `sparklyr`
mtcars_sparklyr <- copy_to(sc, df = mtcars, name = "mtcars_tbl", overwrite = TRUE, repartition = 3L)
# Read table from `SparkR`
mtcars_sparklr <- SparkR::sql("select cyl, count(*) as n
from mtcars_tbl
GROUP BY cyl
ORDER BY n DESC")
head(mtcars_sparklr)
機械学習
線形回帰モデルに適合するために ml_linear_regression()
を使用する例を次に示します。 組み込みの mtcars
データセットを使用し、その重量 (wt
) とエンジンに含まれるシリンダーの数 (cyl
) に基づいて自動車の燃料消費量 (mpg
) を予測できるかどうかを確認します。 いずれの場合も、mpg
と各特徴の関係は線形であると仮定します。
テストとトレーニングのデータ セットを生成する
モデルをトレーニングする際には、分割した70%を%として使用し、テストには30%を%として使用します。 この比率を調整することで、さまざまなモデルが生まれます。
# split the dataframe into test and training dataframes
partitions <- mtcars_tbl %>%
select(mpg, wt, cyl) %>%
sdf_random_split(training = 0.7, test = 0.3, seed = 2023)
モデルをトレーニングする
ロジスティック回帰モデルをトレーニングします。
fit <- partitions$training %>%
ml_linear_regression(mpg ~ .)
fit
次に、summary()
を使用して、モデルの品質と、各予測変数の統計的有意性についてもう少し学習します。
summary(fit)
モデルを使用する
ml_predict()
を呼び出すことで、テスト データセットにモデルを適用できます。
pred <- ml_predict(fit, partitions$test)
head(pred)
sparklyr で使用できる Spark ML モデルの一覧については、「リファレンス - ML
Spark クラスターからの切断
spark_disconnect()
を呼び出すか、ノートブック リボンの上部にある [セッションの停止] ボタン 選択して Spark セッションを終了できます。
spark_disconnect(sc)
関連コンテンツ
R 機能の詳細については、以下を参照してください。
- SparkR を使用する方法
- Tidyverse の使用方法
- R ライブラリ管理
- R 視覚化 を作成する
- チュートリアル: アボカド価格予測
- チュートリアル: フライト遅延予測