【问题标题】:Error in U-SQL Job on Azure Data LakeAzure Data Lake 上的 U-SQL 作业出错
【发布时间】:2018-03-01 05:08:07
【问题描述】:

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

我想要做的是提取一个特定的字段:从每个 json 中提取时间戳,然后将其放入 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:文件未找到或访问被拒绝

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

  1. 我不想为每个文件一个一个地运行它。我只想给它一个文件夹中的所有文件(如 Tracking*.json)或只是一堆文件夹(如 Folder*),它应该通过它们并将每个文件的输出放在输出的单行中csv。

没有找到这方面的教程。

  1. 现在,我正在读取整个 json,如何只读取一个字段,例如时间戳,它是特定字段中的一个字段,例如 data : {timestamp:"xxx"}?

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    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 数据的信息。
    希望这会有所帮助,如果您还有其他问题,请告诉我!

    【讨论】:

    • 谢谢,这个错误已经消失了,请看stackoverflow.com/questions/49137679/…这个问题。我只想创建一个包含每个 json 名称-值对的表......作为表中的一列:例如如果 System: Data 是一对我需要一列作为 System 并且该列的行的值将是 = Data。请看一下。谢谢。
    • 嗨,安迪,我刚刚回答了你链接的那个问题 - 你能告诉我这个解决方案是否适合你吗?如果没有,我们可以进一步处理您的具体案例!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多