توسيع البرامج النصية U-SQL باستخدام تعليمات R البرمجية في Azure Data Lake Analytics
يوضح المثال التالي الخطوات الأساسية لنشر التعليمات البرمجية R:
- استخدم العبارة
REFERENCE ASSEMBLYلتمكين ملحقات R للبرنامج النصي U-SQL. - استخدم العملية
REDUCEلتقسيم بيانات الإدخال على مفتاح. - تتضمن ملحقات R ل U-SQL مخفضا مضمنا (
Extension.R.Reducer) يقوم بتشغيل رمز R على كل قمة معينة للمخفض. - استخدام إطارات البيانات المسماة المخصصة التي تسمى
inputFromUSQLوعلىoutputToUSQLالتوالي لتمرير البيانات بين U-SQL و R. يتم إصلاح أسماء معرفات DataFrame للإدخال والإخراج (أي أنه لا يمكن للمستخدمين تغيير هذه الأسماء المحددة مسبقا لمعرفات DataFrame للإدخال والإخراج).
تضمين التعليمات البرمجية R في البرنامج النصي U-SQL
يمكنك تضمين رمز R الخاص بك U-SQL باستخدام معلمة الأوامر الخاصة ب Extension.R.Reducer. على سبيل المثال، يمكنك الإعلان عن البرنامج النصي 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 لنشر هذا البرنامج النصي R مع عبارة DEPLOY SOURCE.
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 [الأنواع المدعومة:
double, , , ,stringboolintegerbyte]. Factorنوع البيانات غير معتمد في U-SQL.byte[]يجب أن تكون متسلسلة كترميزstringbase64 .- يمكن تحويل سلاسل U-SQL إلى عوامل في رمز R ، بمجرد أن تقوم U-SQL بإنشاء إطار بيانات إدخال R أو عن طريق تعيين معلمة
stringsAsFactors: trueالمخفض .
المخططات
- لا يمكن أن تحتوي مجموعات بيانات U-SQL على أسماء أعمدة مكررة.
- يجب أن تكون أسماء أعمدة مجموعات البيانات U-SQL عبارة عن سلاسل.
- يجب أن تكون أسماء الأعمدة هي نفسها في البرامج النصية U-SQL و R.
- لا يمكن أن يكون عمود القراءة فقط جزءا من إطار بيانات الإخراج. لأنه يتم حقن أعمدة القراءة فقط تلقائيا مرة أخرى في جدول U-SQL إذا كان جزءا من مخطط إخراج UDO.
القيود الوظيفية
- لا يمكن إنشاء محرك R مرتين في نفس العملية.
- حاليا، لا يدعم U-SQL UDOs المدمجة للتنبؤ باستخدام النماذج المقسمة التي تم إنشاؤها باستخدام UDOs المخفضة. يمكن للمستخدمين الإعلان عن النماذج المقسمة كمورد واستخدامها في البرنامج النصي 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
قيود حجم المدخلات والمخرجات
كل قمة لديها كمية محدودة من الذاكرة المخصصة لها. نظرا لأن إطارات DataFrames للإدخال والإخراج يجب أن تكون موجودة في الذاكرة في التعليمات البرمجية R ، لا يمكن أن يتجاوز الحجم الإجمالي للإدخال والإخراج 500 ميغابايت.
عينة التعليمات البرمجية
يتوفر المزيد من نماذج التعليمات البرمجية في حسابك في Data Lake Store بعد تثبيت ملحقات U-SQL Advanced Analytics. المسار لمزيد من التعليمات البرمجية النموذجية هو: <your_account_address>/usqlext/samples/R.
نشر وحدات R المخصصة باستخدام U-SQL
أولا ، قم بإنشاء وحدة R مخصصة وضغطها ثم قم بتحميل ملف الوحدة النمطية المخصصة R المضغوط إلى متجر ADL الخاص بك. في المثال ، سنقوم بتحميل magittr_1.5.zip إلى جذر حساب ADLS الافتراضي لحساب ADLA الذي نستخدمه. بمجرد تحميل الوحدة النمطية إلى متجر 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();