Выполнить 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
Вы можете попробовать установить все пакеты и зависимости для своего модуля, но вам нужно сделать это при каждом выполнении.