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 voutputToUSQL
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.Reducer
pří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: true
redukce .
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();