Azure Data Lake 上的 U-SQL 作业出错
Error in U-SQL Job on Azure Data Lake
我的 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);
我收到错误:
E_STORE_USER_FILENOTFOUND: 文件未找到或访问被拒绝
但我确实可以访问 Azure Data Lake 的数据资源管理器中的文件,那怎么可能?
- 我不想 运行 对每个文件逐一进行。我只想给它一个文件夹中的所有文件(如 Tracking*.json)或一堆文件夹(如 Folder*),它应该遍历它们并将每个文件的输出放在一个文件中输出 csv 的行。
还没有找到任何这方面的教程。
- 现在,我正在阅读整个 json,如何只读取一个字段,如时间戳,它是特定字段中的一个字段,如数据:{timestamp:"xxx"}?
感谢您的帮助。
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) and in this blog 上找到有关如何读取嵌套 JSON 数据的信息。
希望这对您有所帮助,如果您还有其他问题,请告诉我!
我的 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);
我收到错误:
E_STORE_USER_FILENOTFOUND: 文件未找到或访问被拒绝
但我确实可以访问 Azure Data Lake 的数据资源管理器中的文件,那怎么可能?
- 我不想 运行 对每个文件逐一进行。我只想给它一个文件夹中的所有文件(如 Tracking*.json)或一堆文件夹(如 Folder*),它应该遍历它们并将每个文件的输出放在一个文件中输出 csv 的行。
还没有找到任何这方面的教程。
- 现在,我正在阅读整个 json,如何只读取一个字段,如时间戳,它是特定字段中的一个字段,如数据:{timestamp:"xxx"}?
感谢您的帮助。
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) and in this blog 上找到有关如何读取嵌套 JSON 数据的信息。
希望这对您有所帮助,如果您还有其他问题,请告诉我!