Azure Data Lake Analytics で R コードを使用した U-SQL スクリプトの拡張

重要

Azure Data Lake Analytics 2024 年 2 月 29 日に廃止されました。 詳細については、このお知らせを参照してください。

データ分析の場合、organizationでは Azure Synapse Analytics または Microsoft Fabric を使用できます。

R コードをデプロイする基本的な手順を以下の例で示します。

  • REFERENCE ASSEMBLY ステートメントを使用して、U-SQL スクリプト用の R 拡張機能を有効にします。
  • REDUCE 操作を使用してキーの入力データをパーティション化します。
  • U-SQL 用の R 拡張機能には、レジューサ (Extension.R.Reducer) が組み込まれており、レジューサに割り当てられている各頂点で R コードを実行します。
  • U-SQL と R の間でデータを渡すために、 と outputToUSQL をそれぞれ呼び出inputFromUSQLす専用の名前付きデータ フレームの使用。入力と出力の DataFrame 識別子名は固定されています (つまり、ユーザーはこれらの定義済みの入力と出力の DataFrame 識別子の名前を変更できません)。

U-SQL スクリプトへの R コードの埋め込み

Extension.R.Reducer のコマンド パラメーターを使用して、U-SQL スクリプトに R コードをインライン化できます。 たとえば、R スクリプトを文字列変数として宣言し、それをパラメーターとしてレジューサーに渡すことができます。

REFERENCE ASSEMBLY [ExtR];

DECLARE @myRScript = @"
inputFromUSQL$Species = as.factor(inputFromUSQL$Species)
lm.fit=lm(unclass(Species)~.-Par, data=inputFromUSQL)
#do not return readonly columns and make sure that the column names are the same in usql and r cripts,
outputToUSQL=data.frame(summary(lm.fit)$coefficients)
colnames(outputToUSQL) <- c(""Estimate"", ""StdError"", ""tValue"", ""Pr"")
outputToUSQL
";

@RScriptOutput = REDUCE … USING new Extension.R.Reducer(command:@myRScript, ReturnType:"dataframe");

R コードを個別のファイルに保持し、それを U-SQL スクリプトで参照する

次の例は、より複雑な使用法を示しています。 この場合、R コードは U-SQL スクリプトである RESOURCE としてデプロイされます。

この R コードを個別のファイルとして保存します。

load("my_model_LM_Iris.rda")
outputToUSQL=data.frame(predict(lm.fit, inputFromUSQL, interval="confidence"))

U-SQL スクリプトを使用して、その R スクリプトを DEPLOY RESOURCE ステートメントでデプロイします。

REFERENCE ASSEMBLY [ExtR];
DEPLOY RESOURCE @"/usqlext/samples/R/RinUSQL_PredictUsingLinearModelasDF.R";
DEPLOY RESOURCE @"/usqlext/samples/R/my_model_LM_Iris.rda";
DECLARE @IrisData string = @"/usqlext/samples/R/iris.csv";
DECLARE @OutputFilePredictions string = @"/my/R/Output/LMPredictionsIris.txt";
DECLARE @PartitionCount int = 10;
@InputData =
    EXTRACT
        SepalLength double,
        SepalWidth double,
        PetalLength double,
        PetalWidth double,
        Species string
    FROM @IrisData
    USING Extractors.Csv();
@ExtendedData =
    SELECT
        Extension.R.RandomNumberGenerator.GetRandomNumber(@PartitionCount) AS Par,
        SepalLength,
        SepalWidth,
        PetalLength,
        PetalWidth
    FROM @InputData;
// Predict Species
@RScriptOutput = REDUCE @ExtendedData ON Par
    PRODUCE Par, fit double, lwr double, upr double
    READONLY Par
    USING new Extension.R.Reducer(scriptFile:"RinUSQL_PredictUsingLinearModelasDF.R", rReturnType:"dataframe", stringsAsFactors:false);
    OUTPUT @RScriptOutput TO @OutputFilePredictions USING Outputters.Tsv();

R と U-SQL を統合する方法

データ型

  • R データ フレームと U-SQL の間では、U-SQL の文字列と数値列は現状のまま変換されます (サポートされる型: doublestringboolintegerbyte)。
  • データ型は Factor U-SQL ではサポートされていません。
  • byte[] は、base64 でエンコードされたstringとしてシリアル化する必要があります。
  • U-SQL で R の入力データ フレームを作成するか、レジューサ パラメーター stringsAsFactors: true を設定することによって、U-SQL の文字列を R コードの因子に変換できます。

スキーマ

  • U-SQL データセットに重複する列名を指定することはできません。
  • U-SQL データセットの列名は文字列でなければなりません。
  • 列名は、U-SQL と R スクリプトで同じである必要があります。
  • Readonly 列を出力データフレームの一部にすることはできません。 UDO の出力スキーマの一部である場合、読み取り専用列は U-SQL テーブルに自動的に挿入されます。

機能制限

  • R エンジンを同じプロセス内で 2 回インスタンス化することはできません。
  • 現在、U-SQL では、Reducer UDO を使用して生成されたパーティション分割モデルを使用した予測用のコンバイナー UDO はサポートされていません。 ユーザーは、パーティション分割モデルをリソースとして宣言し、それらを R スクリプトで使用できます (サンプル コード ExtR_PredictUsingLMRawStringReducer.usql を参照)。

R のバージョン

R 3.2.2 のみがサポートされています。

標準の R モジュール

base
boot
Class
Cluster
codetools
compiler
datasets
doParallel
doRSR
foreach
foreign
Graphics
grDevices
grid
iterators
KernSmooth
lattice
MASS
Matrix
Methods
mgcv
nlme
Nnet
Parallel
pkgXMLBuilder
RevoIOQ
revoIpe
RevoMods
RevoPemaR
RevoRpeConnector
RevoRsrConnector
RevoScaleR
RevoTreeView
RevoUtils
RevoUtilsMath
Rpart
RUnit
spatial
splines
Stats
stats4
survival
Tcltk
Tools
translations
utils
XML

入力と出力のサイズ制限

各頂点には、割り当てられたメモリ量に制限があります。 入力と出力の DataFrame は R コードのメモリ内に存在する必要があるため、入力と出力の合計サイズは 500 MB を超えることはできません。

サンプル コード

U-SQL の高度な分析拡張機能をインストールした後は、Data Lake Store アカウントでその他のサンプル コードを使用できます。 他のサンプル コードのパスは <your_account_address>/usqlext/samples/R です。

U-SQL でのカスタム R モジュールのデプロイ

最初に、R カスタム モジュールを作成し、それを zip ファイル化してから、その zip ファイル化された R カスタム モジュール ファイルを ADL ストアにアップロードします。 この例では、使用している ADLA アカウントの既定の ADLS アカウントのルートに magittr_1.5.zip をアップロードします。 モジュールを ADL ストアにアップロードしたら、それを DEPLOY RESOURCE を使用するように宣言して U-SQL スクリプトで使用できるようにした後、"install.packages" を呼び出してそれをインストールします。

REFERENCE ASSEMBLY [ExtR];
DEPLOY RESOURCE @"/magrittr_1.5.zip";
DECLARE @IrisData string =  @"/usqlext/samples/R/iris.csv";
DECLARE @OutputFileModelSummary string = @"/R/Output/CustomPackages.txt";
// R script to run
DECLARE @myRScript = @"
# install the magrittr package,
install.packages('magrittr_1.5.zip', repos = NULL),
# load the magrittr package,
require(magrittr),
# demonstrate use of the magrittr package,
2 %>% sqrt
";
@InputData =
EXTRACT SepalLength double,
SepalWidth double,
PetalLength double,
PetalWidth double,
Species string
FROM @IrisData
USING Extractors.Csv();
@ExtendedData =
SELECT 0 AS Par,
*
FROM @InputData;
@RScriptOutput = REDUCE @ExtendedData ON Par
PRODUCE Par, RowId int, ROutput string
READONLY Par
USING new Extension.R.Reducer(command:@myRScript, rReturnType:"charactermatrix");
OUTPUT @RScriptOutput TO @OutputFileModelSummary USING Outputters.Tsv();

次のステップ