我正在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” \“
答案 0 :(得分:2)
我无法发表评论,所以我将以这种方式发布我的问题。
您是否使用DEPLOY RESOURCE将查找文件部署到工作目录?该文件需要部署在您正在进行操作的每个顶点中。因此,必须进行明确部署。本地部署可能存在一些怪癖,但请先澄清一下。
答案 1 :(得分:1)
延长chi的答案。
U-SQL在两个商店“层”上运行(缺少更好的术语):
自定义代码无法直接使用文件IO访问全局持久存储层。相反,U-SQL提供了所谓的UDO模型,该模型将通过定义良好的接口为每个节点提供文件的一部分。
那么,如果要直接读取文件内容,如何访问存储在用户代码中的数据湖中的文件和资源?您需要将文件复制(部署)到每个节点的本地工作目录中。这可以通过使用slice
上的ADDITIONAL_FILE
选项,或使用chi提到的CREATE ASSEMBLY
语句来完成。
现在已经说过,本地执行模式似乎在这个领域有一个我们已修复但尚未发布的错误(它可能会在月底发布)。如果您之前需要修复,请告诉我们,我们将看看是否可以部署修补程序。