Condividi tramite


Estendere gli script U-SQL con codice R in Azure Data Lake Analytics

Importante

Azure Data Lake Analytics è stato ritirato il 29 febbraio 2024. Scopri di più su con questo annuncio.

Per l'analisi dei dati, l'organizzazione può usare azure Synapse Analytics o Microsoft Fabric.

L'esempio seguente illustra i passaggi di base per la distribuzione del codice R:

  • Usare l'istruzione REFERENCE ASSEMBLY per abilitare le estensioni R per lo script U-SQL.
  • Usare l'operazione REDUCE per partizionare i dati di input in una chiave.
  • Le estensioni R per U-SQL includono un riduttore predefinito (Extension.R.Reducer) che esegue codice R in ogni vertice assegnato al riduttore.
  • L'utilizzo di frame di dati denominati dedicati denominati inputFromUSQL e outputToUSQL rispettivamente per passare i dati tra U-SQL e R. I nomi degli identificatori di dataframe di input e output sono fissi, ovvero gli utenti non possono modificare questi nomi predefiniti degli identificatori di dataframe di input e output.

Incorporamento di codice R nello script U-SQL

È possibile incorporare il codice R nel tuo script U-SQL utilizzando il parametro di comando di Extension.R.Reducer. Ad esempio, è possibile dichiarare lo script R come variabile stringa e passarlo come parametro al 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");

Mantenere il codice R in un file separato e farvi riferimento allo script U-SQL

L'esempio seguente illustra un utilizzo più complesso. In questo caso, il codice R viene distribuito come RISORSA che è lo script U-SQL.

Salvare questo codice R come file separato.

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

Usare uno script U-SQL per effettuare la distribuzione dello script R col comando 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();

Come R si integra con U-SQL

Tipi di dati

  • Le colonne stringa e numeriche di U-SQL vengono convertite as-is tra R DataFrame e U-SQL [tipi supportati: double, string, bool, integer, byte].
  • Il tipo di dati Factor non è supportato in U-SQL.
  • byte[] deve essere serializzato come stringcon codifica Base64.
  • Le stringhe U-SQL possono essere convertite in fattori nel codice R, dopo che U-SQL crea un dataframe di input R o impostando il parametro reducer stringsAsFactors: true.

Schemi

  • I set di dati U-SQL non possono avere nomi di colonna duplicati.
  • I nomi delle colonne dei set di dati U-SQL devono essere stringhe.
  • I nomi delle colonne devono essere gli stessi negli script U-SQL e R.
  • La colonna readonly non può far parte del dataframe di output. Poiché le colonne a sola lettura vengono inserite automaticamente nella tabella U-SQL se fanno parte dello schema di output di un UDO.

Limitazioni funzionali

  • Non è possibile creare un'istanza del motore R due volte nello stesso processo.
  • Attualmente, U-SQL non supporta i Combiner UDOs per la predizione usando modelli partizionati generati tramite i Reducer UDOs. Gli utenti possono dichiarare i modelli partizionati come risorsa e usarli nello script R (vedere codice di esempio ExtR_PredictUsingLMRawStringReducer.usql)

Versioni R

È supportato solo R 3.2.2.

Moduli R standard

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

Limitazioni relative alle dimensioni di input e output

A ogni vertice è assegnata una quantità limitata di memoria. Poiché i dataframe di input e output devono esistere in memoria nel codice R, le dimensioni totali per l'input e l'output non possono superare i 500 MB.

Codice di esempio

Un altro codice di esempio è disponibile nell'account Data Lake Store dopo aver installato le estensioni di Analisi avanzata U-SQL. Il percorso per un altro codice di esempio è: <your_account_address>/usqlext/samples/R.

Distribuzione di moduli R personalizzati con U-SQL

Prima di tutto, creare un modulo personalizzato R e comprimerlo e quindi caricare il file di modulo personalizzato R compresso nell'archivio ADL. Nell'esempio, caricheremo magittr_1.5.zip nella directory principale dell'account ADLS predefinito per l'account ADLA che stiamo utilizzando. Dopo aver caricato il modulo nell'archivio ADL, dichiararlo come usare DEPLOY RESOURCE per renderlo disponibile nello script U-SQL e chiamare install.packages per installarlo.

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

Passaggi successivi