【问题标题】:Execute R inside U-SQL在 U-SQL 中执行 R
【发布时间】:2018-09-05 09:20:59
【问题描述】:

我正在尝试使用 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 发送列列表?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    definition 用户定义的 reducer 获取 n 行并生成一行或多行,使用它来生成新列数据和新行。 U-SQL 的 R 扩展包括一个内置的 reducer (Extension.R.Reducer),它在分配给 reducer 的每个顶点上运行 R 代码。您可以使用“inputFromUSQL”的特殊 R 参数获取输入行集并使用 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")
    

    【讨论】:

      【解决方案2】:

      还有另一个重要的细节可能是您提到的问题的原因 - 分区。通过使用 REDUCE 表达式,我们可以通过分区来分离我们的分析工作负载。每个分区可以独立并行执行,最后通过REDUCE操作收集所有结果。当使用 R 进行数据预测时,我们需要一次运行所有行来运行算法,所以我们不能做任何分区。如果我们不需要分区,我们可以使用 REDUCE ALL。另一种方法是指定一个伪分区(所有行都使用一个相同的分区)。

      在此处查看示例:https://github.com/Azure/ADLAwithR-GettingStarted/tree/master/Tutorial/Exercise5

      【讨论】:

        猜你喜欢
        • 2017-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多