2016-01-14 4 views
1

J'écris un réducteur personnalisé en U-SQL qui nécessite un fichier de recherche en tant qu'argument dans le constructeur du réducteur. Le problème est lorsque je fais l'exécution locale, il ne peut pas localiser le fichier de recherche qui est inclus dans le projet sous répertoire/data /. Voici l'extrait de code:U-SQL Le réducteur personnalisé n'a pas pu trouver le fichier

DECLARE @EventType string = @"/data/EventType.csv"; 
... 
@red = 
REDUCE @filtered 
ON id 
PRODUCE 
... 
USING new USQLApplication1.MyReducer(@EventType); 

Et voici le message d'erreur que je reçois. Quelle que soit la solution, je voudrais que cela fonctionne non seulement dans la course locale, mais aussi dans le nuage azur. Merci.

course étape 1 de 1

Exception non: System.Exception: { "diagnosticCode": 195887132, "gravité": "E rror", "composant": "exécution", "source" : "Utilisateur", "errorId": "E_RUNTIME_USER_UNHANDLED_ EXCEPTION_FROM_USER_CODE", "message": "Une exception non gérée du code utilisateur a été signalée par b lors de l'appel de la méthode 'Constructeur' sur le type d'utilisateur 'USQLApplic ation1.MyReducer'" , "description": "Exception non gérée du code utilisateur: \" Impossible de trouver le fichier 'D: \ Utilisateurs \ jbfp \ Documents \ Visual Studio 2015 \ Projets \ USQL Application1 \ USQLApplication1 \ bin \ Debug \ ECB1C 361139EE2D8 \ Script2_2E96CB20AE 368E7B \ EventType.csv. \ »

Répondre

2

Je ne peux pas commenter donc je vais poster ma question de cette façon. Utilisez-vous DEPLOY RESOURCE pour déployer votre fichier de recherche dans votre répertoire de travail? Le fichier devra être déployé dans chacun des sommets que votre opération a lieu. D'où un déploiement explicite est nécessaire. Il peut y avoir quelques bizarreries avec le déploiement local mais clarifions cela d'abord.

1

S'étendre sur la réponse de chi.

U-SQL fonctionne sur deux magasins "couches" (faute d'un meilleur terme):

  1. Le monde entier a persisté couche magasin. Principalement Azure Data Lake Storage ou Windows Azure Blob Store.
  2. Chaque nœud qui exécute une fonction ou un opérateur défini par l'utilisateur fournit également un accès au répertoire de travail du système de fichiers local du nœud.

Le code personnalisé ne peut pas accéder directement à la couche de stockage persistante globalement avec les E/S de fichiers. Au lieu de cela U-SQL fournit le modèle UDO appelé qui fournira des parties du fichier à chaque nœud via une interface bien définie.

Alors, comment pouvez-vous accéder aux fichiers et aux ressources stockés dans le Data Lake dans votre code d'utilisateur si vous voulez lire directement le contenu du fichier? Vous devez copier (déployer) le fichier dans le répertoire de travail local de chaque noeud. Cela est effectué en utilisant l'option ADDITIONAL_FILE sur CREATE ASSEMBLY ou en utilisant l'instruction DEPLOY RESOURCE que chi a mentionnée. Cela dit, le mode d'exécution locale semble avoir un bug dans ce domaine que nous avons corrigé mais pas encore publié (il sera probablement publié d'ici la fin du mois). Si vous avez besoin du correctif plus tôt, s'il vous plaît laissez-nous savoir et nous verrons si nous pouvons déployer un correctif.