다음을 통해 공유


Azure Data Lake Analytics에서 R 코드를 사용하여 U-SQL 스크립트 확장

중요합니다

Azure Data Lake Analytics는 2024년 2월 29일에 사용 중지되었습니다. 에 대해 더 알고 싶다면 이 공지을 확인하세요.

데이터 분석을 위해 조직은 Azure Synapse Analytics 또는 Microsoft Fabric 사용할 수 있습니다.

다음 예제에서는 R 코드를 배포하기 위한 기본 단계를 보여 줍니다.

  • REFERENCE ASSEMBLY 문을 사용하여 U-SQL 스크립트에 R 확장을 사용하도록 설정합니다.
  • REDUCE 작업을 사용하여 키의 입력 데이터를 분할합니다.
  • U-SQL용 R 확장에는 리듀서에 할당된 각 꼭짓점에서 R 코드를 실행하는 기본 제공 리듀서(Extension.R.Reducer)가 포함됩니다.
  • U-SQL과 R 간에 데이터를 전달하기 위해 각각 inputFromUSQLoutputToUSQL 명명된 전용 데이터 프레임을 사용합니다. 입력 및 출력 DataFrame 식별자 이름은 고정됩니다(즉, 사용자는 이러한 미리 정의된 입력 및 출력 DataFrame 식별자 이름을 변경할 수 없습니다).

U-SQL 스크립트에 R 코드 포함

Extension.R.Reducer명령 매개 변수를 사용하여 U-SQL 스크립트에 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 DataFrame과 U-SQL 간에 as-is 변환됩니다.[지원되는 형식: double, string, bool, integer, byte].
  • Factor 데이터 형식은 U-SQL에서 지원되지 않습니다.
  • byte[]는 base64로 인코딩된 string로 직렬화해야 합니다.
  • U-SQL이 R 입력 데이터 프레임을 만들거나 리듀서 매개 변수를 stringsAsFactors: true설정하면 U-SQL 문자열을 R 코드의 요소로 변환할 수 있습니다.

스키마

  • U-SQL 데이터 세트에는 중복 열 이름이 있을 수 없습니다.
  • U-SQL 데이터 세트 열 이름은 문자열이어야 합니다.
  • 열 이름은 U-SQL 및 R 스크립트에서 동일해야 합니다.
  • 읽기 전용 열은 출력 데이터 프레임의 일부가 될 수 없습니다. 읽기 전용 열은 UDO의 출력 스키마의 일부인 경우 U-SQL 테이블에 자동으로 다시 삽입되기 때문입니다.

기능 제한 사항

  • R 엔진은 동일한 프로세스에서 두 번 인스턴스화할 수 없습니다.
  • 현재 U-SQL은 Reducer UDO를 사용하여 생성된 분할된 모델을 사용하여 예측하기 위해 Combiner 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 코드의 메모리에 있어야 하므로 입력 및 출력의 총 크기는 500MB를 초과할 수 없습니다.

샘플 코드

U-SQL Advanced Analytics 확장을 설치한 후 Data Lake Store 계정에서 더 많은 샘플 코드를 사용할 수 있습니다. 더 많은 샘플 코드의 경로는 <your_account_address>/usqlext/samples/R.

U-SQL을 사용하여 사용자 지정 R 모듈 배포

먼저 R 사용자 지정 모듈을 만들고 압축한 다음 압축된 R 사용자 지정 모듈 파일을 ADL 저장소에 업로드합니다. 이 예제에서는 사용 중인 ADLA 계정에 대한 기본 ADLS 계정의 루트에 magittr_1.5.zip 업로드합니다. 모듈을 ADL 저장소에 업로드한 후 배포 리소스를 사용하여 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();

다음 단계