Compartir vía


Extend U-SQL scripts with R code in Azure Data Lake Analytics (Extensión de los scripts de U-SQL con código R en Azure Data Lake Analytics)

Importante

Azure Data Lake Analytics retiró el 29 de febrero de 2024. Más información sobre este anuncio.

Para el análisis de datos, su organización puede usar Azure Synapse Analytics o Microsoft Fabric.

En el ejemplo siguiente se muestran los pasos básicos para implementar código R:

  • Uso de la instrucción REFERENCE ASSEMBLY para habilitar las extensiones de R para el script de U-SQL.
  • Use la operación REDUCE para la partición de datos de entrada de una clave.
  • Las extensiones de R para U-SQL incluyen un reductor integrado (Extension.R.Reducer) que ejecuta código R en cada vértice asignado al reductor.
  • Se ha corregido el uso de marcos de datos con nombre dedicados denominados inputFromUSQL y outputToUSQL , respectivamente, para pasar datos entre U-SQL y R. Los nombres de identificador de dataFrame de entrada y salida son fijos (es decir, los usuarios no pueden cambiar estos nombres predefinidos de identificadores dataframe de entrada y salida).

Incrustación de código R en el script de U-SQL

Mediante el parámetro de comando Extension.R.Reducer, puede insertar el código R de su script U-SQL. Por ejemplo, puede declarar el script de R como una variable de cadena y pasarla como un parámetro al reductor.

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

Mantenimiento del código R en un archivo aparte y referencia a él mediante el script U-SQL

En el ejemplo siguiente se ilustra un uso más complejo. En este caso, el código R se implementa como RESOURCE que es el script de U-SQL.

Guarde este código R como un archivo aparte.

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

Use un script U-SQL para implementar ese script R con la instrucción 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();

Cómo se integra R con U-SQL

Tipos de datos

  • Las columnas de cadena y numéricas de U-SQL se convierten tal cual entre R DataFrame y U-SQL [tipos admitidos: double, string, bool, integer y byte].
  • El Factor tipo de datos no se admite en U-SQL.
  • byte[] debe serializarse como string codificada en base64.
  • Las cadenas de U-SQL se pueden convertir en factores en el código R, una vez que U-SQL cree una trama de datos de entrada de R o mediante el establecimiento del parámetro reductor stringsAsFactors: true.

Esquemas

  • Los conjuntos de datos de U-SQL no pueden tener nombres de columna duplicados.
  • Los nombres de columna de conjuntos de datos de U-SQL deben ser cadenas.
  • Los nombres de columna deben ser los mismos en los scripts de U-SQL y de R.
  • La columna readonly no puede formar parte de la trama de datos de salida. Dado que las columnas de solo lectura se insertan automáticamente en la tabla U-SQL si forma parte del esquema de salida de UDO.

Limitaciones funcionales

  • No se puede crear una instancia dos veces del motor de R en el mismo proceso.
  • Actualmente, U-SQL no admite udO del combinador para la predicción mediante modelos con particiones generados mediante udOs de reductor. Los usuarios pueden declarar los modelos particionados como recurso y usarlos en su script de R (consulte el código de ejemplo ExtR_PredictUsingLMRawStringReducer.usql)

Versiones de R

Solo se admite R 3.2.2.

Módulos de R estándar

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

Limitaciones de tamaño de entrada y salida

Cada vértice tiene una cantidad limitada de memoria asignada a él. Dado que los dataframes de entrada y salida deben existir en memoria en el código de R, el tamaño total de la entrada y salida no puede superar los 500 MB.

Código de ejemplo

Puede encontrar más código de ejemplo en su cuenta Data Lake Store después de instalar las extensiones U-SQL Advanced Analytics. Ruta de acceso a más código de ejemplo: <your_account_address>/usqlext/samples/R.

Implementación de módulos de R personalizados con U-SQL

En primer lugar, cree un módulo personalizado de R, comprímalo y luego cargue este archivo comprimido en su almacén de ADL. En el ejemplo, cargaremos magittr_1.5.zip en la raíz de la cuenta de ADLS predeterminada para la cuenta de ADLA que estamos usando. Una vez que cargue el módulo en el almacén de ADL, declárelo como que usa DEPLOY RESOURCE para ponerlo a disposición en su script U-SQL y llame a install.packages para instalarlo.

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

Pasos siguientes