2017-09-04 1 views
2

Je cherche à créer une fonction Azure qui récupère le fichier du stockage Blob et l'envoie à un script R.Azure fonction: comment déclencher le script PS sur l'ajout de fichier au conteneur blob pour appeler le traitement du script R

J'ai suivi this pour activer le script R en ajoutant les extensions Site, qui fonctionnent finalement après quelques impulsions initiales.

Maintenant, la question que j'ai est:

1. comment déclencher la fonction lorsqu'un nouveau fichier est téléchargé sur le magasin de blob que celui-ci utilise l'approche Powershell.

cd D:\home\site\wwwroot\MyFunctionName D:\home\R-3.3.3\bin\x64\Rscript.exe script.r 2>&1

2. Comment puis-je accéder au fichier blob Azure de script R pour le traitement.

Quelqu'un at-il un exemple simple qu'ils peuvent partager. disons juste d'ouvrir le fichier en R et d'imprimer les lignes de totaux dans le fichier.

Cordialement Kiran

Répondre

1

Depuis fonction Azure n'a pas pris en charge déclencheur blob pour Powershell encore, vous pouvez envisager d'utiliser BlobTrigger - C# à la place. Une fonction C# qui sera exécutée chaque fois qu'un blob est ajouté à un conteneur spécifié, puis vous pouvez enregistrer ce fichier blob sur local, puis appeler le script R pour l'ouvrir et lire le fichier.

Voici un exemple de fonction C# pour votre référence.

public static void Run(Stream myBlob, string name, string ext, TraceWriter log) 
{ 
    string basePath = Environment.ExpandEnvironmentVariables(@"%home%\site\wwwroot\BlobTriggerCSharp1"); 

    // save to current dir 
    string filePath = Path.Combine(basePath, $"{Guid.NewGuid().ToString()}.{ext}"); 
    using (FileStream fs = new FileStream(filePath, FileMode.Create)) 
    { 
     myBlob.CopyTo(fs); 
    } 

    // run R script 
    var process = new System.Diagnostics.Process { 
        StartInfo = new System.Diagnostics.ProcessStartInfo { 
            FileName = "D:/home/R-3.3.3/bin/x64/Rscript.exe", 
         Arguments = basePath + "/script.r " + filePath, 
            UseShellExecute = false, 
            RedirectStandardOutput = true, 
            CreateNoWindow = true 
        } 
    }; 
    process.Start(); 
    string output = process.StandardOutput.ReadToEnd(); 
    process.WaitForExit(); 

    log.Info(output); 
} 

function.json

{ 
    "bindings": [ 
    { 
     "name": "myBlob", 
     "type": "blobTrigger", 
     "direction": "in", 
     "path": "mycontainer/{name}.{ext}", 
     "connection": "mystorage_STORAGE" 
    } 
    ], 
    "disabled": false 
} 

Si votre fichier blob est un fichier TXT, vous pouvez le lire avec read.table() R.

args = commandArgs(trailingOnly=TRUE) 
df = read.table(args[1], header=TRUE) 
print(df)