重要
Azure Data Lake Analytics 于 2024 年 2 月 29 日停用。 通过此公告了解详细信息。
对于数据分析,组织可以使用 Azure Synapse Analytics 或 Microsoft Fabric。
以下示例演示了部署 R 代码的基本步骤:
- 使用
REFERENCE ASSEMBLY
语句来为 U-SQL 脚本启用 R 扩展。 - 使用
REDUCE
操作对输入数据按键进行分区。 - U-SQL 的 R 扩展包括一个内置化简器(
Extension.R.Reducer
),用于在分配给化简器的每个顶点上运行 R 代码。 - 使用专门命名的数据帧
inputFromUSQL
和outputToUSQL
分别在 U-SQL 和 R 之间传递数据。输入和输出的数据帧标识符名称是固定的(也就是说,用户无法更改这些输入和输出数据帧标识符的预定义名称)。
在 U-SQL 脚本中嵌入 R 代码
可以通过在 U-SQL 脚本中使用 Extension.R.Reducer
命令参数来内嵌 R 代码。 例如,可以将 R 脚本声明为字符串变量,并将其作为参数传递给化简器。
REFERENCE ASSEMBLY [ExtR];
DECLARE @myRScript = @"
inputFromUSQL$Species = as.factor(inputFromUSQL$Species)
lm.fit=lm(unclass(Species)~.-Par, data=inputFromUSQL)
#do not return readonly columns and make sure that the column names are the same in usql and r cripts,
outputToUSQL=data.frame(summary(lm.fit)$coefficients)
colnames(outputToUSQL) <- c(""Estimate"", ""StdError"", ""tValue"", ""Pr"")
outputToUSQL
";
@RScriptOutput = REDUCE … USING new Extension.R.Reducer(command:@myRScript, ReturnType:"dataframe");
将 R 代码保存在单独的文件中,并在 U-SQL 脚本中引用它。
以下示例演示了更复杂的用法。 在这种情况下,R 代码被部署为 U-SQL 脚本中的资源。
将此 R 代码保存为单独的文件。
load("my_model_LM_Iris.rda")
outputToUSQL=data.frame(predict(lm.fit, inputFromUSQL, interval="confidence"))
使用 U-SQL 脚本通过 DEPLOY RESOURCE 语句部署该 R 脚本。
REFERENCE ASSEMBLY [ExtR];
DEPLOY RESOURCE @"/usqlext/samples/R/RinUSQL_PredictUsingLinearModelasDF.R";
DEPLOY RESOURCE @"/usqlext/samples/R/my_model_LM_Iris.rda";
DECLARE @IrisData string = @"/usqlext/samples/R/iris.csv";
DECLARE @OutputFilePredictions string = @"/my/R/Output/LMPredictionsIris.txt";
DECLARE @PartitionCount int = 10;
@InputData =
EXTRACT
SepalLength double,
SepalWidth double,
PetalLength double,
PetalWidth double,
Species string
FROM @IrisData
USING Extractors.Csv();
@ExtendedData =
SELECT
Extension.R.RandomNumberGenerator.GetRandomNumber(@PartitionCount) AS Par,
SepalLength,
SepalWidth,
PetalLength,
PetalWidth
FROM @InputData;
// Predict Species
@RScriptOutput = REDUCE @ExtendedData ON Par
PRODUCE Par, fit double, lwr double, upr double
READONLY Par
USING new Extension.R.Reducer(scriptFile:"RinUSQL_PredictUsingLinearModelasDF.R", rReturnType:"dataframe", stringsAsFactors:false);
OUTPUT @RScriptOutput TO @OutputFilePredictions USING Outputters.Tsv();
R 如何与 U-SQL 集成
数据类型
- 从 U-SQL 和 R 数据帧之间转换字符串列和数字列 as-is [支持的类型:
double
、string
、bool
、integer
、byte
]。 -
Factor
U-SQL 不支持该数据类型。 -
byte[]
必须序列化为 base64 编码string
。 - U-SQL 字符串可以在 R 代码中转换为因子,只需在 U-SQL 中创建 R 输入数据帧,或通过设置 reducer 参数
stringsAsFactors: true
。
模式
- U-SQL 数据集不能具有重复的列名称。
- U-SQL 数据集列名称必须是字符串。
- U-SQL 和 R 脚本中的列名必须相同。
- 输出数据框中不可包含只读列。 如果只读列是 UDO 输出架构的一部分,它们会自动注入到 U-SQL 表中。
功能限制
- 在同一进程中,无法实例化 R 引擎两次。
- 目前,U-SQL 不支持使用化简器 UDO 生成的分区模型,通过组合器 UDO 进行预测。 用户可以将分区模型声明为资源,并在 R 脚本中使用它们(请参阅示例代码
ExtR_PredictUsingLMRawStringReducer.usql
)
R 版本
仅支持 R 3.2.2。
标准 R 模块
base
boot
Class
Cluster
codetools
compiler
datasets
doParallel
doRSR
foreach
foreign
Graphics
grDevices
grid
iterators
KernSmooth
lattice
MASS
Matrix
Methods
mgcv
nlme
Nnet
Parallel
pkgXMLBuilder
RevoIOQ
revoIpe
RevoMods
RevoPemaR
RevoRpeConnector
RevoRsrConnector
RevoScaleR
RevoTreeView
RevoUtils
RevoUtilsMath
Rpart
RUnit
spatial
splines
Stats
stats4
survival
Tcltk
Tools
translations
utils
XML
输入和输出大小限制
每个顶点分配的内存量有限。 由于输入和输出数据帧必须存在于 R 代码的内存中,因此输入和输出的总大小不能超过 500 MB。
示例代码
安装 U-SQL 高级分析扩展后,Data Lake Store 帐户中提供了更多示例代码。 更多示例代码的路径为: <your_account_address>/usqlext/samples/R
。
使用 U-SQL 部署自定义 R 模块
首先,创建 R 自定义模块并将其压缩,然后将压缩的 R 自定义模块文件上传到 ADL 存储。 在此示例中,我们将 magittr_1.5.zip 上传到我们正在使用的 ADLA 帐户的默认 ADLS 帐户的根目录。 将模块上传到 ADL 存储后,将其声明为使用 DEPLOY RESOURCE 使其在 U-SQL 脚本中可用并调用 install.packages
以安装它。
REFERENCE ASSEMBLY [ExtR];
DEPLOY RESOURCE @"/magrittr_1.5.zip";
DECLARE @IrisData string = @"/usqlext/samples/R/iris.csv";
DECLARE @OutputFileModelSummary string = @"/R/Output/CustomPackages.txt";
// R script to run
DECLARE @myRScript = @"
# install the magrittr package,
install.packages('magrittr_1.5.zip', repos = NULL),
# load the magrittr package,
require(magrittr),
# demonstrate use of the magrittr package,
2 %>% sqrt
";
@InputData =
EXTRACT SepalLength double,
SepalWidth double,
PetalLength double,
PetalWidth double,
Species string
FROM @IrisData
USING Extractors.Csv();
@ExtendedData =
SELECT 0 AS Par,
*
FROM @InputData;
@RScriptOutput = REDUCE @ExtendedData ON Par
PRODUCE Par, RowId int, ROutput string
READONLY Par
USING new Extension.R.Reducer(command:@myRScript, rReturnType:"charactermatrix");
OUTPUT @RScriptOutput TO @OutputFileModelSummary USING Outputters.Tsv();