Partager via


Étendre des scripts U-SQL avec du code R dans Azure Data Lake Analytics

Important

Azure Data Lake Analytics a pris sa retraite le 29 février 2024. En savoir plus avec cette annonce.

Pour l’analytique des données, votre organisation peut utiliser Azure Synapse Analytics ou Microsoft Fabric.

L’exemple suivant illustre les étapes de base pour le déploiement de code R :

  • Utilisez l’instruction REFERENCE ASSEMBLY pour activer les extensions R pour le script U-SQL.
  • Utilisez l’opération REDUCE pour partitionner les données d’entrée sur une clé.
  • Les extensions R pour U-SQL incluent un réducteur intégré (Extension.R.Reducer) qui exécute du code R sur chaque vertex affecté au réducteur.
  • L’utilisation des trames de données nommées dédiées appelées inputFromUSQL et outputToUSQL respectivement pour transmettre des données entre U-SQL et R. Les noms d’identificateurs dataFrame d’entrée et de sortie sont fixes (autrement dit, les utilisateurs ne peuvent pas modifier ces noms prédéfinis d’identificateurs dataFrame d’entrée et de sortie).

Incorporation de code R dans le script U-SQL

Vous pouvez inliner le code R de votre script U-SQL à l’aide du paramètre de commande du Extension.R.Reducer. Par exemple, vous pouvez déclarer le script R en tant que variable de chaîne et le transmettre en tant que paramètre au Reducer.

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

Conservez le code R dans un fichier distinct et référencez-le au script U-SQL

L’exemple suivant illustre une utilisation plus complexe. Dans ce cas, le code R est déployé en tant que RESSOURCE qui est le script U-SQL.

Enregistrez ce code R sous la forme d’un fichier distinct.

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

Utilisez un script U-SQL pour déployer ce script R avec l’instruction 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();

Intégration de R à U-SQL

Types de données

  • Les colonnes de chaîne et numériques de U-SQL sont converties as-is entre R DataFrame et U-SQL [types pris en charge : double, string, bool, integer, byte].
  • Le Factor type de données n’est pas pris en charge dans U-SQL.
  • byte[] doit être sérialisé sous la forme d’un string encodé en base64.
  • Les chaînes U-SQL peuvent être converties en facteurs dans le code R, une fois que U-SQL crée un dataframe d'entrée pour R ou en définissant le paramètre reducer stringsAsFactors: true.

Schémas

  • Les jeux de données U-SQL ne peuvent pas avoir de noms de colonnes en double.
  • Les noms de colonnes des jeux de données U-SQL doivent être des chaînes.
  • Les noms de colonnes doivent être identiques dans les scripts U-SQL et R.
  • La colonne readonly ne peut pas faire partie du dataframe de sortie. Étant donné que les colonnes en lecture seule sont automatiquement injectées dans la table U-SQL s’il s’agit d’une partie du schéma de sortie de UDO.

Limitations fonctionnelles

  • Le moteur R ne peut pas être instancié deux fois dans le même processus.
  • Actuellement, U-SQL ne prend pas en charge les Combiner UDOs pour la prédiction à l’aide de modèles partitionnés générés à l’aide de Reducer UDOs. Les utilisateurs peuvent déclarer les modèles partitionnés en tant que ressource et les utiliser dans leur script R (voir l’exemple de code ExtR_PredictUsingLMRawStringReducer.usql)

Versions de R

Seule R 3.2.2 est prise en charge.

Modules standard 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

Limitations de taille d’entrée et de sortie

Chaque vertex a une quantité limitée de mémoire qui lui est affectée. Étant donné que les DataFrames d’entrée et de sortie doivent exister en mémoire dans le code R, la taille totale de l’entrée et de la sortie ne peut pas dépasser 500 Mo.

Exemple de code

D’autres exemples de code sont disponibles dans votre compte Data Lake Store après avoir installé les extensions U-SQL Advanced Analytics. Le chemin d’accès pour plus d’exemples de code est : <your_account_address>/usqlext/samples/R.

Déploiement de modules R personnalisés avec U-SQL

Tout d’abord, créez un module personnalisé R et compressez-le, puis chargez le fichier de module personnalisé R compressé dans votre magasin ADL. Dans l’exemple, nous allons charger magittr_1.5.zip à la racine du compte ADLS par défaut pour le compte ADLA que nous utilisons. Une fois que vous avez chargé le module dans le magasin ADL, déclarez-le à utiliser la commande DEPLOY RESOURCE pour le rendre disponible dans votre script U-SQL, puis appelez install.packages pour l'installer.

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();

Étapes suivantes