Compartir a través de


Extensión de scripts de U-SQL con código de R en Azure Data Lake Analytics

Importante

Azure Data Lake Analytics se retiró el 29 de febrero de 2024. Obtenga más información con 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 de R:

  • Use la instrucción REFERENCE ASSEMBLY para habilitar las extensiones de R para el script U-SQL.
  • Use la operación REDUCE para particionar los datos de entrada en una clave.
  • Las extensiones de R para U-SQL incluyen un reductor integrado (Extension.R.Reducer) que ejecuta código de R en cada vértice asignado al reductor.
  • 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 identificadores 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).

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

Puede insertar el código R en su script U-SQL utilizando el parámetro de comando Extension.R.Reducer. Por ejemplo, puede declarar el script de R como una variable de cadena y pasarlo como 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");

Mantenga el código de R en un archivo independiente y haga referencia a él el script U-SQL.

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

Guarde este código de R como un archivo independiente.

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

Use un script U-SQL para implementar ese script de 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 as-is entre R DataFrame y U-SQL [tipos admitidos: double, string, bool, integer, byte].
  • El tipo de datos Factor no se admite en U-SQL.
  • byte[] debe serializarse como un stringcodificado en base64.
  • Las cadenas de U-SQL se pueden convertir en factores en el código R después de que U-SQL cree un dataframe de entrada para R, o estableciendo el parámetro de reducción stringsAsFactors: true.

Esquemas

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

Limitaciones funcionales

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

Versiones de R

Solo se admite R 3.2.2.

Módulos estándar de 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

Limitaciones de tamaño de entrada y salida

Cada vértice tiene asignada una cantidad limitada de memoria. Dado que los dataframes de entrada y salida deben existir en la 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

Hay más código de ejemplo disponible en la cuenta de Data Lake Store después de instalar las extensiones de U-SQL Advanced Analytics. La ruta de acceso para obtener más código de ejemplo es: <your_account_address>/usqlext/samples/R.

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

En primer lugar, cree un módulo personalizado de R, comprímalo y luego suba el archivo comprimido del módulo personalizado de R a su tienda ADL. En el ejemplo, subiremos magittr_1.5.zip a la raíz de la cuenta de ADLS predeterminada para la cuenta de ADLA que estamos utilizando. Una vez cargado el módulo en el almacén de ADL, anótelo como use DEPLOY RESOURCE para que esté disponible en el script de 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