توسيع البرامج النصية 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();

الخطوات التالية