這很重要
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 之間傳遞資料。輸入和輸出 DataFrame 識別碼名稱是固定的(也就是說,使用者無法變更這些預先定義的輸入和輸出 DataFrame 識別符名稱)。
在 U-SQL 腳本中內嵌 R 程式代碼
您可以使用 Extension.R.Reducer的命令參數,將 R 程式碼內嵌到 U-SQL 腳本中。 例如,您可以將 R 腳稿宣告為字串變數,並將它當做參數傳遞至 Reducer。
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 DataFrame 與 U-SQL 之間轉換 as-is [支援的類型:
double、string、bool、integer、byte]。 - U-SQL 不支援
Factor資料類型。 -
byte[]必須串行化為base64編碼string。 - U-SQL 字串可以在 R 中轉換為因子,當 U-SQL 建立 R 輸入的 dataframe 或設定歸約器參數
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
輸入和輸出大小限制
每個頂點都有指派的記憶體數量有限。 由於輸入和輸出 DataFrame 必須存在於 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();