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 i outputToUSQL 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, , stringbool, integer, byte].
  • Typ Factor danych nie jest obsługiwany w języku U-SQL.
  • byte[] musi być serializowany jako zakodowany stringw 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: trueredukcji .

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

Następne kroki