我尝试使用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发送列的列表,而是发送行的列表进行处理?
谢谢!
发布于 2018-09-05 19:17:14
通过definition,用户定义的reducers获取n行并生成一行或多行,使用它来生成新的列数据,同时也生成新的行。U-SQL的R扩展包括一个内置的reducer (Extension.R.Reducer),它在分配给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")发布于 2018-09-17 23:04:09
还有另一个重要的细节可能是导致您提到的问题的原因-分区。通过使用REDUCE表达式,我们可以通过分区来分离分析工作负载。每个分区可以独立地并行执行,所有的结果都在最后通过REDUCE操作收集。当使用R进行数据预测时,我们需要一次运行算法的所有行,所以我们不能进行任何分区。如果我们不需要分区,我们可以使用REDUCE ALL。另一种方法是指定一个伪分区(为所有行指定一个相同的分区)。
在这里查看一个示例:https://github.com/Azure/ADLAwithR-GettingStarted/tree/master/Tutorial/Exercise5
https://stackoverflow.com/questions/52181554
复制相似问题