Azure Data Lake上的U-SQL作业出错

时间:2018-03-01 05:08:08

标签: azure azure-data-lake u-sql

我的Azure Data Lake帐户中有很多json文件。它们被组织为:存档 - >文件夹1 - > JSON文件。

我想要做的是从每个json中提取一个特定的字段:timestamp然后将它放在一个csv文件中。

我的问题是:

我从这个脚本开始:

CREATE ASSEMBLY IF NOT EXISTS [Newtonsoft.Json] FROM "correct_path/Assemblies/JSON/Newtonsoft.Json.dll";
CREATE ASSEMBLY IF NOT EXISTS [Microsoft.Analytics.Samples.Formats] FROM "correct_path/Assemblies/JSON/Microsoft.Analytics.Samples.Formats.dll";

REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];

DECLARE @INPUT_FILE string = @"correct_path/Tracking_3e9.json";


//Extract the different properties from the Json file using a JsonExtractor
@json =
    EXTRACT Partition string, Custom string
    FROM @INPUT_FILE
    USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor();


OUTPUT @json
TO "correct_path/Output/simple.csv"
USING Outputters.Csv(quoting : false);
  1. 我收到错误:

    E_STORE_USER_FILENOTFOUND:找不到文件或拒绝访问

  2. 但是我确实可以访问Azure Data Lake的数据资源管理器中的文件,那怎么可能呢?

    1. 我不想逐个为每个文件运行它。我只想给它一个文件夹中的所有文件(如Tracking * .json)或只是一堆文件夹(如Folder *),它应该通过它们并将每个文件的输出放在输出的单行中CSV。
    2. Haven没有找到任何关于此的教程。

      1. 现在,我正在阅读整个json,如何只读取一个字段,如时间戳,这是特定字段中的字段,如数据:{timestamp:" xxx"}?
      2. 感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

1)不确定为什么在没有更多信息的情况下遇到该错误 - 您是否明确错过了输入文件或者是程序集?

2)您可以使用文件集从一组文件中提取数据。只需使用{}表示输入字符串中的通配符,然后将该字符保存在新列中。例如,您的输入字符串可以是@" correct_path / {day} / {hour} / {id} .json",然后您的提取语句变为:

    EXTRACT
        column1 string,
        column2 string,
        day     int,
        hour    int,
        id      int
   FROM @input

3)您必须在SELECT语句中读取整个JSON,但是您可以将其细化为仅在未来行集中所需的行。例如:

    @refine=
        SELECT timestamp FROM @json;

     OUTPUT @refine
     ...

听起来您的某些JSON数据是嵌套的(如时间戳字段)。您可以在我们的GitHub(Using the JSON UDFs)和this blog中找到有关如何读取嵌套JSON数据的信息。
希望这会有所帮助,如果您有其他问题,请告诉我们!