Поделиться через


Расширение возможностей сценариев U-SQL c кодом R в Azure Data Lake Analytics

Важно!

Поддержка Azure Data Lake Analytics прекращена 29 февраля 2024 г. Дополнительные сведения см. в этом объявлении.

Для аналитики данных ваша организация может использовать Azure Synapse Analytics или Microsoft Fabric.

В следующих примерах представлены основные шаги по развертыванию кода R:

  • Используйте инструкцию REFERENCE ASSEMBLY, чтобы включить расширения R для скрипта U-SQL.
  • Используйте операцию REDUCE для разделения входных данных на ключ.
  • Расширения R для U-SQL включают встроенное средство редукции (Extension.R.Reducer), которое выполняет код R в каждой назначенной ему вершине.
  • Использование выделенных именованных кадров данных с именем inputFromUSQL и outputToUSQL соответственно для передачи данных между U-SQL и R. Имена идентификаторов входных и выходных кадров данных являются фиксированными (то есть пользователи не могут изменять эти предопределенные имена входных и выходных идентификаторов кадров данных).

Внедрение кода R в скрипт U-SQL

Код R можно встроить в скрипт U-SQL с помощью параметра команды средства Extension.R.Reducer. Например, можно объявить скрипт R как строковую переменную и передать его в качестве параметра в 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");

Сохраните код R в отдельном файле и составьте на него ссылку на скрипт U-SQL.

В следующем примере демонстрируется более сложное использование. В этом случае код R развертывается как RESOURCE, который является скриптом U-SQL.

Сохраните этот код R как отдельный файл.

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

Используйте скрипт U-SQL для развертывания этого скрипта R с оператором 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();

Интеграция R c U-SQL

Типы данных

  • Строковые и числовые столбцы из U-SQL преобразуются без изменений между таблицей данных на R и U-SQL [поддерживаемые типы: double, string, bool, integer, byte].
  • Тип Factor данных не поддерживается в U-SQL.
  • Тип byte[] должен быть сериализован как строка string в кодировке Base64.
  • После создания в U-SQL входной таблицы данных R или установки для параметра средства редукции stringsAsFactors: true значения true строки U-SQL можно преобразовать в коэффициенты кода R.

Схемы

  • Наборы данных U-SQL не могут содержать повторяющиеся имена столбцов.
  • Имена столбцов в наборах данных U-SQL должны быть строками.
  • Имена столбцов в скриптах U-SQL и R должны совпадать.
  • Только для чтения столбец не может быть частью выходного кадра данных. Так как столбцы только для чтения автоматически внедряются обратно в таблицу U-SQL, если она является частью выходной схемы UDO.

Ограничения функциональных возможностей

  • Ядро R нельзя создать дважды в одном процессе.
  • В настоящее время U-SQL не поддерживает определяемые пользователем объекты Combiner для прогнозирования с использованием секционированных моделей, созданных с помощью определяемых пользователем объектов Reduce. Пользователи могут объявить секционированные модели как ресурс и использовать их в своих скриптах R (см. пример кода ExtR_PredictUsingLMRawStringReducer.usql)

Версии R

Поддерживается только R 3.2.2.

Стандартные модули 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

Ограничения размера входных и выходных данных

Каждой вершине назначен ограниченный объем памяти. Так как входные и выходные кадры данных должны находиться в памяти в коде R, общий размер входных и выходных данных не может превышать 500 МБ.

Пример кода

Дополнительные примеры кода доступны в вашей учетной записи Data Lake Store после установки расширений расширенной аналитики U-SQL. Путь к другим примерам кода: <your_account_address>/usqlext/samples/R.

Развертывание настраиваемых модулей R с помощью U-SQL

Сначала создайте настраиваемый модуль R, заархивируйте его в ZIP-файл, а затем отправьте этот ZIP-файл с настраиваемым модулем в хранилище ADL. В этом примере мы отправим magittr_1.5.zip в корень учетной записи ADLS по умолчанию для используемой учетной записи ADLA. После отправки модуля в хранилище ADL объявите его с помощью DEPLOY RESOURCE, чтобы сделать этот модуль доступным в скрипте U-SQL, затем вызовите метод install.packages, чтобы установить его.

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

Дальнейшие действия