Rozšíření skriptů U-SQL pomocí kódu R v Azure Data Lake Analytics

Důležité

Azure Data Lake Analytics vyřazena 29. února 2024. Další informace najdete v tomto oznámení.

K analýze dat může vaše organizace použít Azure Synapse Analytics nebo Microsoft Fabric.

Následující příklad znázorňuje základní kroky pro nasazení kódu R:

  • Pomocí příkazu REFERENCE ASSEMBLY povolte rozšíření jazyka R pro skript U-SQL.
  • REDUCE Pomocí operace rozdělte vstupní data na klíč.
  • Rozšíření R pro U-SQL zahrnují integrovaný redukční modul (Extension.R.Reducer), který spouští kód R na každém vrcholu přiřazeného reduktoru.
  • Použití vyhrazených pojmenovaných datových rámců s názvem inputFromUSQL a v outputToUSQL uvedeném pořadí k předávání dat mezi U-SQL a R. Názvy identifikátorů vstupních a výstupních datových rámců jsou pevné (to znamená, že uživatelé nemohou tyto předdefinované názvy identifikátorů vstupních a výstupních datových rámců změnit).

Vložení kódu R do skriptu U-SQL

Kód R můžete vložit do skriptu U-SQL pomocí parametru Extension.R.Reducerpříkazu . Můžete například deklarovat skript R jako řetězcovou proměnnou a předat ho jako parametr reduceru.

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

Ponechte kód R v samostatném souboru a odkažte na něj skript U-SQL.

Následující příklad ukazuje složitější použití. V tomto případě se kód R nasadí jako prostředek, což je skript U-SQL.

Uložte tento kód R jako samostatný soubor.

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

Pomocí skriptu U-SQL nasaďte tento skript R s příkazem 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();

Integrace R s U-SQL

Datové typy

  • Řetězcové a číselné sloupce z U-SQL se mezi datovým rámcem R a U-SQL převádějí tak, jak jsou [podporované typy: double, string, bool, , integer, ]. byte
  • Datový Factor typ se v U-SQL nepodporuje.
  • byte[] musí být serializován jako base64 kódovaný string.
  • Řetězce U-SQL lze převést na faktory v kódu R, jakmile U-SQL vytvoří vstupní datový rámec R nebo nastavením parametru stringsAsFactors: trueredukce .

Schémata

  • Datové sady U-SQL nemůžou mít duplicitní názvy sloupců.
  • Názvy sloupců datových sad U-SQL musí být řetězce.
  • Názvy sloupců musí být stejné ve skriptech U-SQL a R.
  • Sloupec Jen pro čtení nemůže být součástí výstupního datového rámce. Vzhledem k tomu, že sloupce jen pro čtení jsou automaticky vloženy zpět do tabulky U-SQL, pokud je součástí výstupního schématu UDO.

Funkční omezení

  • Instanci modulu R není možné vytvořit dvakrát v rámci stejného procesu.
  • U-SQL v současné době nepodporuje objekty UDO zkombinování pro predikce pomocí dělených modelů generovaných pomocí objektů UDO redukce. Uživatelé můžou deklarovat dělené modely jako prostředek a použít je ve svém skriptu R (viz ukázkový kód ExtR_PredictUsingLMRawStringReducer.usql).

Verze R

Podporuje se pouze R 3.2.2.

Moduly R úrovně 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

Omezení velikosti vstupu a výstupu

Každému vrcholu je přiřazeno omezené množství paměti. Vzhledem k tomu, že vstupní a výstupní datové rámce musí existovat v paměti v kódu R, nesmí celková velikost vstupu a výstupu překročit 500 MB.

Ukázka kódu

Další ukázkový kód je k dispozici ve vašem účtu Data Lake Store po instalaci rozšíření U-SQL Pokročilá analýza. Cesta pro další vzorový kód je: <your_account_address>/usqlext/samples/R.

Nasazení vlastních modulů R pomocí U-SQL

Nejprve vytvořte vlastní modul jazyka R, zazipujte ho a pak nahrajte soubor zipovaného vlastního modulu jazyka R do úložiště ADL. V tomto příkladu nahrajeme magittr_1.5.zip do kořenového adresáře výchozího účtu ADLS pro účet ADLA, který používáme. Jakmile modul nahrajete do úložiště ADL, deklarujte ho pomocí příkazu DEPLOY RESOURCE, který ho zpřístupní ve skriptu U-SQL, a zavolejte install.packages ho k jeho instalaci.

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

Další kroky