在U-SQL中执行R

时间:2018-09-05 09:20:59

标签: r azure-data-lake u-sql

我正在尝试使用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发送列列表,而是发送要处理的行列表?

谢谢!

2 个答案:

答案 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