From e2f67e4d736e6e89211bc6f42505a8f8fdab7bea Mon Sep 17 00:00:00 2001 From: Alex Wang Date: Fri, 10 Jul 2015 12:57:31 -0700 Subject: [PATCH] expanded demo code --- demo/demo.R | 48 ++++++++++++++++++++++++++++++----------------- maml/R/consume.R | 12 ++---------- maml/R/discover.R | 1 + maml/R/publish.R | 9 +++++---- 4 files changed, 39 insertions(+), 31 deletions(-) diff --git a/demo/demo.R b/demo/demo.R index c677b98..5e22b89 100644 --- a/demo/demo.R +++ b/demo/demo.R @@ -3,9 +3,16 @@ ##################################################################################################### # IMPORTANT: need to compile all of consume, discover, publish functions before running this demo -setwd("C://Users/t-ritra/Documents/GitHub/Azure-MachineLearning-ClientLibrary-R/demo") +setwd("C://Users/t-ritra/Github/Documents/Azure-MachineLearning-ClientLibrary-R/demo") +setwd("C://Users/t-alewa/Documents/Azure-MachineLearning-ClientLibrary-R/demo") + +# test server myID = "bbc91d900c3546b695d6507867fc72ae" myAuth = "ffc4b8d52c494e9eb42726b77112be88" + +# internal server +myID = "3612640f27234eb7b2b91ac62e8b4a40" +myAuth = "abcbe14a958a40978f93aa0e0e71f5be" test <- read.csv(file="test.csv") train <- read.csv(file="train.csv") @@ -74,27 +81,34 @@ predictTitanic(1, "male", "20", "2", "0", "8.50") - - # Publish the function -TitanicService <- publishWebService("predictTitanic", "TitanicDemo7-8", list("Pclass"="string", "Sex"="string", "Age"="int", "SibSp"="int", "Parch"="int", "Fare"="float"), list("survProb"="float"), myID, myAuth) -TitanicService <- publishWebService("predictTitanic", "TitanicDemo7-9", list("Pclass"="string", "Sex"="string", "Age"="int", "SibSp"="int", "Parch"="int", "Fare"="float"), list("survProb"="float"), myID, myAuth) - -# Currently response is a list of three things: -# new web service details, default endpoint details, specific consumption function -# Rename the consumption function -consumeTitanic <- TitanicService[[3]] +# Go to https://metaanalytics001.cloudapp.net/Home/ViewWorkspace/bbc91d900c3546b695d6507867fc72ae?#Workspace/WebServiceGroups/listWebServiceGroups +# to see published function +TitanicService <- publishWebService("predictTitanic", "TitanicDemo7-10", list("Pclass"="string", "Sex"="string", "Age"="int", "SibSp"="int", "Parch"="int", "Fare"="double"), list("survProb"="double"), myID, myAuth) +# Currently response is a list of two things: +# new web service details, default endpoint details (using discovery functions) +# Discover the endpoints +# Go to help page +endpoints <- getEndpoints(myID, myAuth, TitanicService[[1]]["Id"], internalURL) +# Alternatively, +endpoints <- TitanicService[[2]] -# Use the new function, consumeList curried with the new web service details -# Slow initially as it makes the connection, but subsequent calls are faster -# as connection is left open -response <- consumeTitanic(list("1", "male", "20", "1", "0", "8.50"), list("1", "female", "20", "1", "0", "8.50")) -# data frame consumption + +# Consume the new webservice +# First, consume with inputs as a list +# Slow initially as it makes the connection +response <- consumeLists(endpoints[[1]]["PrimaryKey"], paste(endpoints[[1]]["ApiLocation"], "/execute?api-version=2.0&details=true",sep=""), list("Pclass", "Sex", "Age", "SibSp", "Parch", "Fare"), list("1", "male", "20", "1", "0", "8.50"), list("1", "female", "20", "1", "0", "8.50")) +# Subsequent calls are faster as connection is left open +response2 <- consumeLists(endpoints[[1]]["PrimaryKey"], paste(endpoints[[1]]["ApiLocation"], "/execute?api-version=2.0&details=true",sep=""), list("Pclass", "Sex", "Age", "SibSp", "Parch", "Fare"), list("2", "male", "50", "1", "0", "8.50"), list("2", "female", "50", "1", "0", "8.50")) + +# consume with inputs as dataframe # creating test data.frame -demoDF <- data.frame("Pclass"=c(1,2,3), "Sex"=c("male","female","male"), "Age"=c("8","20", "50"), "Parch"=c(1,2,3), "SibSp"=c(1,2,3), "Fare"=c(10,7.5, 6)) -responseDF <- consumeDataframe(TitanicService[[2]][[1]]$PrimaryKey, paste(TitanicService[[2]][[1]]$ApiLocation,"/execute?api-version=2.0&details=true",sep=""), demoDF) +demoDF <- data.frame("Pclass"=c(1,2,3), "Sex"=c("male","female","male"), "Age"=c("8","20", "50"), "Parch"=c(1,2,3), "SibSp"=c(1,1,1), "Fare"=c(10,7.5, 6)) responseDF <- consumeDataframe(TitanicService[[2]][[1]]$PrimaryKey, paste(TitanicService[[2]][[1]]$ApiLocation,"/execute?api-version=2.0&details=true",sep=""), demoDF) + + +# Questions, comments, concerns? \ No newline at end of file diff --git a/maml/R/consume.R b/maml/R/consume.R index 359f58d..055bc40 100644 --- a/maml/R/consume.R +++ b/maml/R/consume.R @@ -153,27 +153,19 @@ consumeDataframe <- function(api_key, requestURL, valuesDF, globalParam="", batc resultStored <- jsonlite::fromJSON(temp) resultList = resultStored$Results$output1$value$Values resultDF <- data.frame(resultList[,(ncol(resultList))]) - print(resultDF) - print(is.data.frame(resultDF)) if(length(df) != 0 && length(resultDF) != 0) { names(df) <- names(resultDF) } df <- rbind(df,resultDF) - colnames(df) <- "Scored probabilities" - - print("passed") + colnames(df) <- resultStored$Results$output1$value$ColumnNames print(sprintf("%i %s %i %s", i,"out of",length(values),"processed")) valuebatch = list() counter = 0 } counter = counter + 1 } - colnames(df) <- "Scored probabilities" return(df) - resultStored <- jsonlite::fromJSON(resultStored) - resultDF <- data.frame(matrix(resultStored$Results$output1$value$Values)) - colnames(resultDF) <- resultStored$Results$output1$value$ColumnNames - return(resultDF) + } diff --git a/maml/R/discover.R b/maml/R/discover.R index 6a0ab27..f03f379 100644 --- a/maml/R/discover.R +++ b/maml/R/discover.R @@ -8,6 +8,7 @@ epURLdet = "https://management-tm.azureml.net/workspaces/%s/webservices/%s/endpo # remove in real version testURL = "https://hiteshsm.cloudapp.net/workspaces/%s/webservices/%s/endpoints" +internalURL = "https://management.azureml-int.net/workspaces/%s/webservices/%s/endpoints" ############################################################# # Framework for making an HTTP request to the URL specified diff --git a/maml/R/publish.R b/maml/R/publish.R index bfd632b..e0fb7d8 100644 --- a/maml/R/publish.R +++ b/maml/R/publish.R @@ -1,7 +1,8 @@ ################################################################ # String constants ################################################################ -publishURL <- "https://hiteshsm.cloudapp.net/workspaces/%s/webservices/%s" ## REMOVE SSL IGNORING FOR REAL VERSION ## +publishURL <- "https://management.azureml-int.net/workspaces/%s/webservices/%s" ## REMOVE SSL IGNORING FOR REAL VERSION ## +#publishURL <- "https://hiteshsm.cloudapp.net/workspaces/%s/webservices/%s" ## REMOVE SSL IGNORING FOR REAL VERSION ## wrapper <- "inputDF <- maml.mapInputPort(1)\r\noutputDF <- matrix(ncol = %s, nrow = nrow(inputDF))\r\ncolnames(outputDF) <- list(%s)\r\noutputDF <- data.frame(outputDF)\r\nfor (file in list.files(\"src\")) {\r\n if (file == \"%s\") {\r\n load(\"src/%s\")\r\n for (item in names(dependencies)) {\r\n assign(item, dependencies[[item]])\r\n }\r\n }\r\n else {\r\n if (!(file %%in%% installed.packages()[,\"Package\"])) {\r\n install.packages(paste(\"src\", file, sep=\"/\"), lib=\".\", repos=NULL, verbose=TRUE)\r\n }\r\n library(strsplit(file, \"\\\\.\")[[1]][[1]], character.only=TRUE)\r\n }\r\n}\r\naction <- %s\r\n for (i in 1:nrow(inputDF)) {\r\n outputDF[i,] <- do.call(\"action\", as.list(inputDF[i,]))\r\n }\r\nmaml.mapOutputPort(\"outputDF\")" @@ -394,12 +395,12 @@ publishWebService <- function(functionName, serviceName, inputSchema, outputSche # Use discovery functions to get default endpoint for immediate use # switch to getEndpoints() later - defaultEP <- getEndpoints(wkID, authToken, newService["Id"], testURL) + defaultEP <- getEndpoints(wkID, authToken, newService["Id"], internalURL) # Curry relevant parameters to consumption function - consumption <- functional::Curry(consumeLists, "api_key"=defaultEP[[1]]["PrimaryKey"], "requestURL"=paste(defaultEP[[1]]["ApiLocation"],"/execute?api-version=2.0&details=true",sep=""), "columnNames"=as.list(names(inputSchema))) + #consumption <- functional::Curry(consumeLists, "api_key"=defaultEP[[1]]["PrimaryKey"], "requestURL"=paste(defaultEP[[1]]["ApiLocation"],"/execute?api-version=2.0&details=true",sep=""), "columnNames"=as.list(names(inputSchema))) # currently returning list of webservice details, default endpoint details, consumption function, in that order - return(list(newService, defaultEP, consumption)) + return(list(newService, defaultEP))#, consumption)) }