U-SQL Custom reducer找不到文件

时间:2016-01-14 17:40:39

标签: azure u-sql

我正在U-SQL中编写一个自定义reducer,它需要一个查找文件作为reducer构造函数的参数。问题是当我进行本地运行时,它找不到包含在/ data /目录下的项目中的查找文件。以下是代码段:

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

这是我收到的错误消息。无论解决方案是什么,我都希望它不仅可以在本地运行,还可以在天蓝云中运行。感谢。

  

运行第1步(1)

     

未处理的异常:System.Exception:{“diagnosticCode”:195887132,“severity”:“E   RROR “ ”部件“: ”RUNTIME“, ”源“: ”用户“, ”ErrorID中“:” E_RUNTIME_USER_UNHANDLED_   EXCEPTION_FROM_USER_CODE“,”message“:”来自用户代码的未处理异常有b   在用户类型'USQLApplic上调用方法'构造函数'时报告   ation1.MyReducer'“,”description“:”来自用户代码的未处理异常:\“无法找到文件'D:\ Users \ jbfp \ Documents \ Visual Studio 2015 \ Projects \ USQL   应用1 \ USQLApplication1 \ BIN \调试\ ECB1C361139EE2D8 \ Script2_2E96CB20AE   368E7B \ EventType.csv” \“

2 个答案:

答案 0 :(得分:2)

我无法发表评论,所以我将以这种方式发布我的问题。

您是否使用DEPLOY RESOURCE将查找文件部署到工作目录?该文件需要部署在您正在进行操作的每个顶点中。因此,必须进行明确部署。本地部署可能存在一些怪癖,但请先澄清一下。

答案 1 :(得分:1)

延长chi的答案。

U-SQL在两个商店“层”上运行(缺少更好的术语):

  1. 全局持久存储层。主要是Azure Data Lake Storage或Windows Azure Blob Store。
  2. 运行用户定义函数或运算符的每个节点也可以访问节点的本地文件系统的工作目录。
  3. 自定义代码无法直接使用文件IO访问全局持久存储层。相反,U-SQL提供了所谓的UDO模型,该模型将通过定义良好的接口为每个节点提供文件的一部分。

    那么,如果要直接读取文件内容,如何访问存储在用户代码中的数据湖中的文件和资源?您需要将文件复制(部署)到每个节点的本地工作目录中。这可以通过使用slice上的ADDITIONAL_FILE选项,或使用chi提到的CREATE ASSEMBLY语句来完成。

    现在已经说过,本地执行模式似乎在这个领域有一个我们已修复但尚未发布的错误(它可能会在月底发布)。如果您之前需要修复,请告诉我们,我们将看看是否可以部署修补程序。