Выполнить R внутри U-SQL

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

Все примеры, которые я нашел, используют редуктор, поэтому будут обрабатывать только 1 строку.

https://docs.microsoft.com/en-us/azure/data-lake-analytics/data-lake-analytics-u-sql-r-extensions

Возможно ли вместо отправки в R списка столбцов отправить список строк для обработки?

Спасибо!

Ответ 1

Существует еще одна ВАЖНАЯ деталь, которая может быть причиной проблемы, которую вы упомянули - Разделение. Используя выражение REDUCE, мы можем разделить нашу рабочую нагрузку на анализ по разделам. Каждый раздел может выполняться независимо параллельно, и все результаты собираются с помощью операции REDUCE в конце. При использовании R для прогнозирования данных нам нужны все строки сразу для запуска алгоритмов, поэтому мы не можем делать никаких разделов. Если мы не требуем разделения, мы можем использовать СОКРАЩЕНИЕ ВСЕХ. Другой способ - указать псевдо-раздел (один и тот же раздел для всех строк).

Пример: https://github.com/Azure/ADLAwithR-GettingStarted/tree/master/Tutorial/Exercise5

Ответ 2

По определению пользовательские редукторы занимают n строк и производят одну или несколько строк, используют его для создания новых данных столбца, а также новых строк. Расширения R для U-SQL включают встроенный редуктор (Extension.R.Reducer), который запускает R-код для каждой вершины, назначенной редуктору. Вы можете получить набор строк ввода со специальным параметром R "inputFromUSQL" и работать с ним с R.

Как вы указали, это должно работать со всеми строками сразу:

DECLARE @myRScript = @"
inputFromUSQL$mydata = as.factor(inputFromUSQL$mydata)
<..>
";

@myData = <my u-sql query>

@RScriptOutput = REDUCE @myData <..>
USING new Extension.R.Reducer(command:@myRScript, rReturnType:"dataframe")

Ответ 3

Вы можете попробовать установить все пакеты и зависимости для своего модуля, но вам нужно сделать это при каждом выполнении.