Utöka U-SQL-skript med R-kod i Azure Data Lake Analytics

Viktigt

Azure Data Lake Analytics tillbaka den 29 februari 2024. Läs mer med det här meddelandet.

För dataanalys kan din organisation använda Azure Synapse Analytics eller Microsoft Fabric.

I följande exempel visas de grundläggande stegen för att distribuera R-kod:

  • Använd -instruktionen REFERENCE ASSEMBLY för att aktivera R-tillägg för U-SQL-skriptet.
  • Använd åtgärden REDUCE för att partitionering av indata på en nyckel.
  • R-tilläggen för U-SQL innehåller en inbyggd reducering (Extension.R.Reducer) som kör R-kod på varje hörn som tilldelats reducern.
  • Användningen av dedikerade namngivna dataramar som anropas inputFromUSQL respektive outputToUSQL för att skicka data mellan U-SQL- och R. DataFrame-identifierarnamn för indata och utdata är fasta (det vill sägs att användarna inte kan ändra dessa fördefinierade namn på indata- och utdataramidentifierare).

Bädda in R-kod i U-SQL-skriptet

Du kan infoga R-koden i U-SQL-skriptet med hjälp av kommandoparametern för Extension.R.Reducer. Du kan till exempel deklarera R-skriptet som en strängvariabel och skicka det som en parameter till reducern.

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

Behåll R-koden i en separat fil och referera till U-SQL-skriptet

I följande exempel visas en mer komplex användning. I det här fallet distribueras R-koden som en RESURS som är U-SQL-skriptet.

Spara den här R-koden som en separat fil.

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

Använd ett U-SQL-skript för att distribuera R-skriptet med INSTRUKTIONEN DISTRIBUERA RESURS.

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

Så integrerar R med U-SQL

Datatyper

  • Strängkolumner och numeriska kolumner från U-SQL konverteras som de är mellan R DataFrame och U-SQL [typer som stöds: double, string, bool, integer, ]. byte
  • Datatypen Factor stöds inte i U-SQL.
  • byte[] måste serialiseras som en base64-kodad string.
  • U-SQL-strängar kan konverteras till faktorer i R-kod, när U-SQL skapar en R-indataram eller genom att ange reducerparametern stringsAsFactors: true.

Scheman

  • U-SQL-datauppsättningar kan inte ha dubbla kolumnnamn.
  • Kolumnnamn för U-SQL-datauppsättningar måste vara strängar.
  • Kolumnnamn måste vara samma i U-SQL- och R-skript.
  • Skrivskyddad kolumn kan inte ingå i utdataramen. Eftersom skrivskyddade kolumner automatiskt matas tillbaka i U-SQL-tabellen om det är en del av utdataschemat för UDO.

Funktionsbegränsningar

  • R-motorn kan inte instansieras två gånger i samma process.
  • För närvarande har U-SQL inte stöd för kombinations-UDO:er för förutsägelse med partitionerade modeller som genereras med reducer-UDF:er. Användare kan deklarera de partitionerade modellerna som resurs och använda dem i sitt R-skript (se exempelkod ExtR_PredictUsingLMRawStringReducer.usql)

R-versioner

Endast R 3.2.2 stöds.

Standard R-moduler

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

Storleksbegränsningar för indata och utdata

Varje hörn har en begränsad mängd minne tilldelat till sig. Eftersom dataramarna för indata och utdata måste finnas i minnet i R-koden får den totala storleken för in- och utdata inte överstiga 500 MB.

Exempelkod

Det finns mer exempelkod i ditt Data Lake Store-konto när du har installerat U-SQL Advanced Analytics-tilläggen. Sökvägen till mer exempelkod är: <your_account_address>/usqlext/samples/R.

Distribuera anpassade R-moduler med U-SQL

Skapa först en anpassad R-modul och zippa den och ladda sedan upp den zippade anpassade R-modulfilen till ADL-arkivet. I exemplet laddar vi upp magittr_1.5.zip till roten för ADLS-standardkontot för det ADLA-konto som vi använder. När du har överfört modulen till ADL Store deklarerar du den som använd DEPLOY RESOURCE för att göra den tillgänglig i U-SQL-skriptet och anropa install.packages för att installera den.

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

Nästa steg