我正在尝试使用U-SQL和R进行预测,因此我需要将U-SQL的值列表传递给R,然后将预测结果从R返回到U-SQL
我发现的所有示例都使用reducer,因此将仅处理1行。
https://docs.microsoft.com/en-us/azure/data-lake-analytics/data-lake-analytics-u-sql-r-extensions
是否可以代替向R发送列列表,而是发送要处理的行列表?
谢谢!
答案 0 :(得分:0)
通过definition,用户定义的reduce占用n行并生成一个或多个行,使用它生成新的列数据,还生成新的行。 U-SQL的R扩展包括一个内置的化简器(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")
答案 1 :(得分:0)
还有另一个重要的细节可能是您提到的问题的原因-分区。通过使用REDUCE表达式,我们可以按分区分开分析工作量。每个分区可以独立并行执行,最后所有结果通过REDUCE操作收集。使用R进行数据预测时,我们需要同时运行所有行,因此我们无法进行任何分区。如果不需要分区,则可以使用REDUCE ALL。另一种方法是指定伪分区(所有行使用相同的分区)。
在此处查看示例:https://github.com/Azure/ADLAwithR-GettingStarted/tree/master/Tutorial/Exercise5