Delen via


U-SQL-scripts uitbreiden met R-code in Azure Data Lake Analytics

Belangrijk

Azure Data Lake Analytics op 29 februari 2024 buiten gebruik gesteld. Meer informatie over deze aankondiging.

Voor gegevensanalyse kan uw organisatie gebruikmaken van Azure Synapse Analytics of Microsoft Fabric.

In het volgende voorbeeld ziet u de basisstappen voor het implementeren van R-code:

  • Gebruik de REFERENCE ASSEMBLY instructie om R-extensies in te schakelen voor het U-SQL-script.
  • Gebruik de REDUCE bewerking om de invoergegevens te partitioneren op een sleutel.
  • De R-extensies voor U-SQL bevatten een ingebouwde reducer (Extension.R.Reducer) waarmee R-code wordt uitgevoerd op elk hoekpunt dat is toegewezen aan de reducer.
  • Gebruik van toegewezen benoemde gegevensframes met respectievelijk de naam inputFromUSQL en outputToUSQL om gegevens door te geven tussen U-SQL en R. Invoer- en uitvoernamen van DataFrame-id's zijn vast (dat wil dat gebruikers deze vooraf gedefinieerde namen van invoer- en uitvoergegevensframe-id's niet kunnen wijzigen).

R-code insluiten in het U-SQL-script

U kunt de R-code van uw U-SQL-script inline gebruiken met behulp van de opdrachtparameter van de Extension.R.Reducer. U kunt het R-script bijvoorbeeld declareren als een tekenreeksvariabele en het als parameter doorgeven aan de reducer.

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

Bewaar de R-code in een afzonderlijk bestand en verwijs ernaar naar het U-SQL-script

In het volgende voorbeeld ziet u een complexer gebruik. In dit geval wordt de R-code geïmplementeerd als een RESOURCE die het U-SQL-script is.

Sla deze R-code op als een afzonderlijk bestand.

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

Gebruik een U-SQL-script om dat R-script te implementeren met de INSTRUCTIE 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();

Hoe R integreert met U-SQL

Datatypes

  • Tekenreeks- en numerieke kolommen uit U-SQL worden automatisch geconverteerd tussen R DataFrame en U-SQL [ondersteunde typen: double, string, bool, integer, ]. byte
  • Het Factor gegevenstype wordt niet ondersteund in U-SQL.
  • byte[] moet worden geserialiseerd als een base64-gecodeerd string.
  • U-SQL-tekenreeksen kunnen worden geconverteerd naar factoren in R-code, zodra U-SQL R-invoergegevensframe maakt of door de reducerparameter stringsAsFactors: truein te stellen.

Schema 's

  • U-SQL-gegevenssets mogen geen dubbele kolomnamen hebben.
  • Kolomnamen van U-SQL-gegevenssets moeten tekenreeksen zijn.
  • Kolomnamen moeten hetzelfde zijn in U-SQL- en R-scripts.
  • Alleen-lezen kolom kan geen deel uitmaken van het uitvoergegevensframe. Omdat alleen-lezen kolommen automatisch opnieuw worden geïnjecteerd in de U-SQL-tabel als deze deel uitmaken van het uitvoerschema van UDO.

Functionele beperkingen

  • De R Engine kan niet tweemaal in hetzelfde proces worden geïnstantieerd.
  • Momenteel biedt U-SQL geen ondersteuning voor combiner UDF's voor voorspelling met behulp van gepartitioneerde modellen die zijn gegenereerd met reducer-UDF's. Gebruikers kunnen de gepartitioneerde modellen declareren als resource en deze gebruiken in hun R-script (zie voorbeeldcode ExtR_PredictUsingLMRawStringReducer.usql)

R-versies

Alleen R 3.2.2 wordt ondersteund.

Standard R-modules

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

Beperkingen voor invoer- en uitvoergrootte

Aan elk hoekpunt is een beperkte hoeveelheid geheugen toegewezen. Omdat de invoer- en uitvoer-DataFrames in het geheugen in de R-code moeten bestaan, mag de totale grootte voor de invoer en uitvoer niet groter zijn dan 500 MB.

Voorbeeldcode

Er is meer voorbeeldcode beschikbaar in uw Data Lake Store-account nadat u de U-SQL Geavanceerde analyse-extensies hebt geïnstalleerd. Het pad voor meer voorbeeldcode is: <your_account_address>/usqlext/samples/R.

Aangepaste R-modules implementeren met U-SQL

Maak eerst een aangepaste R-module en zip deze en upload vervolgens het aangepaste R-modulebestand naar uw ADL-archief. In het voorbeeld uploaden we magittr_1.5.zip naar de hoofdmap van het standaard ADLS-account voor het ADLA-account dat we gebruiken. Nadat u de module hebt geüpload naar het ADL-archief, declareert u deze als resource implementeren om deze beschikbaar te maken in uw U-SQL-script en roept install.packages u aan om deze te installeren.

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

Volgende stappen