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
youtputToUSQL
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 unstring
codificado 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();