Rozszerzanie skryptów U-SQL przy użyciu kodu języka R w usłudze Azure Data Lake Analytics
Ważne
Usługa Azure Data Lake Analytics została wycofana 29 lutego 2024 r. Dowiedz się więcej z tym ogłoszeniem.
W przypadku analizy danych organizacja może używać Azure Synapse Analytics lub Microsoft Fabric.
W poniższym przykładzie przedstawiono podstawowe kroki wdrażania kodu języka R:
- Użyj instrukcji
REFERENCE ASSEMBLY
, aby włączyć rozszerzenia języka R dla skryptu U-SQL. -
REDUCE
Użyj operacji , aby podzielić dane wejściowe na klucz. - Rozszerzenia języka R dla języka U-SQL obejmują wbudowany reduktor (
Extension.R.Reducer
), który uruchamia kod języka R na każdym wierzchołku przypisanym do redukcji. - Użycie dedykowanych nazwanych ramek danych o nazwie
inputFromUSQL
ioutputToUSQL
odpowiednio do przekazywania danych między językami U-SQL i R. Nazwy identyfikatorów wejściowych i wyjściowych ramek danych są stałe (czyli użytkownicy nie mogą zmieniać tych wstępnie zdefiniowanych nazw identyfikatorów ramki danych wejściowych i wyjściowych).
Osadzanie kodu języka R w skry skrycie U-SQL
Możesz w tekście użyć kodu języka R skryptu U-SQL, używając parametru polecenia .Extension.R.Reducer
Można na przykład zadeklarować skrypt języka R jako zmienną ciągu i przekazać go jako parametr do modułu redukcji.
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");
Zachowaj kod języka R w osobnym pliku i odwołuj się do niego skryptU U-SQL
Poniższy przykład ilustruje bardziej złożone użycie. W takim przypadku kod języka R jest wdrażany jako zasób, który jest skryptem U-SQL.
Zapisz ten kod języka R jako oddzielny plik.
load("my_model_LM_Iris.rda")
outputToUSQL=data.frame(predict(lm.fit, inputFromUSQL, interval="confidence"))
Użyj skryptu U-SQL, aby wdrożyć ten skrypt języka R za pomocą instrukcji 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();
Jak język R integruje się z językiem U-SQL
Typy danych
- Kolumny ciągowe i liczbowe z języka U-SQL są konwertowane jako między ramkami danych języka R i językiem U-SQL [obsługiwane typy:
double
, ,string
bool
,integer
,byte
]. - Typ
Factor
danych nie jest obsługiwany w języku U-SQL. -
byte[]
musi być serializowany jako zakodowanystring
w formacie base64. - Ciągi U-SQL można przekonwertować na czynniki w kodzie języka R, po utworzeniu ramki danych wejściowych języka R przez U-SQL lub ustawieniu parametru
stringsAsFactors: true
redukcji .
Schematy
- Zestawy danych U-SQL nie mogą mieć zduplikowanych nazw kolumn.
- Nazwy kolumn zestawów danych U-SQL muszą być ciągami.
- Nazwy kolumn muszą być takie same w skryptach U-SQL i R.
- Kolumna readonly nie może być częścią wyjściowej ramki danych. Ponieważ kolumny odczytu są automatycznie wstrzykiwane z powrotem do tabeli U-SQL, jeśli jest to część schematu wyjściowego UDO.
Ograniczenia funkcjonalne
- Aparat języka R nie można utworzyć wystąpienia dwa razy w tym samym procesie.
- Obecnie język U-SQL nie obsługuje obiektów U-SQL do przewidywania przy użyciu partycjonowanych modeli generowanych przy użyciu obiektów UDO redukcji. Użytkownicy mogą deklarować modele partycjonowane jako zasób i używać ich w skrycie języka R (zobacz przykładowy kod
ExtR_PredictUsingLMRawStringReducer.usql
)
Wersje języka R
Obsługiwane są tylko wersje R 3.2.2.
Standardowe moduły języka 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
Ograniczenia rozmiaru danych wejściowych i wyjściowych
Każdy wierzchołek ma przypisaną ograniczoną ilość pamięci. Ponieważ ramki danych wejściowych i wyjściowych muszą istnieć w pamięci w kodzie języka R, całkowity rozmiar danych wejściowych i wyjściowych nie może przekraczać 500 MB.
Przykładowy kod
Więcej przykładowego kodu jest dostępnych na koncie usługi Data Lake Store po zainstalowaniu rozszerzeń Zaawansowana analiza U-SQL. Ścieżka do bardziej przykładowego kodu to: <your_account_address>/usqlext/samples/R
.
Wdrażanie niestandardowych modułów języka R przy użyciu języka U-SQL
Najpierw utwórz niestandardowy moduł języka R i spakuj go, a następnie przekaż spakowany plik niestandardowy modułu języka R do magazynu ADL. W tym przykładzie przekażemy magittr_1.5.zip do katalogu głównego domyślnego konta usługi ADLS dla używanego konta usługi ADLA. Po przekazaniu modułu do magazynu ADL zadeklaruj go jako użyj polecenia DEPLOY RESOURCE, aby udostępnić go w skrycie U-SQL i wywołaj polecenie install.packages
w celu zainstalowania go.
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();