gpt4 book ai didi

Azure Data Lake Analytics IOutputter 获取输出文件名

转载 作者:行者123 更新时间:2023-12-03 03:08:52 24 4
gpt4 key购买 nike

我正在使用自定义 IOutputter 将 U-SQL 脚本的结果写入本地数据库:

OUTPUT @dataset
TO "/path/somefilename_{*}.file"
USING new CustomOutputter()

public class CustomOutputter: IOutputter
{
public CustomOutputter()
{
myCustomDatabase.Open("databasefile.database");
}

public override void Output(IRow input, IUnstructuredWriter output)
{

}
}

是否可以将“databasefile.database”替换为指定的输出文件路径“/path/somefilename_{*}.file”?

由于我无法将 output.BaseStream 传递到数据库,因此我找不到正确写入正确文件名的方法。

更新如何将本地数据库文件复制到 ADLA 提供的输出流:

        public override void Close()
{
using (var fs = File.Open("databasefile.database", FileMode.Open))
{
byte[] buffer = new byte[65536];
int read;
while ((read = fs.Read(buffer, 0, buffer.Length)) > 0)
{
this.output.BaseStream.Write(buffer, 0, read);
this.output.BaseStream.Flush();
}
}
}

最佳答案

我不确定您想要实现什么目标。

  1. 输出器(以及一般的 UDO)在 ADLA 中执行时不能离开其容器 (VM)(本地执行目前没有这样的限制)。因此,连接到容器外部的数据库将被阻止,我不确定将数据写入 transient 虚拟机/容器中的数据库有什么帮助。

  2. UDO 模型具有明确定义的模型,可通过将输入行(集)中的数据写入输出来写入位于 ADLS 或 WASB 中的文件 的流。您可以写入本地文件,但同样,这些文件在顶点执行完成后将不复存在。

鉴于此信息,您能重新表述一下吗?

根据澄清评论进行更新

您有两个选项可以从行集生成数据库:

  1. 您使用 ADF 进行数据移动。这是最常用的方法,也可能是最简单的方法。
  2. 如果您使用自定义输出器,您可以尝试以下操作:
    1. 使用数据库接口(interface)将输出行集写入顶点本地的数据库(您必须将数据库部署为资源,因此您可能需要一个占用空间较小的版本来适应资源大小限制),<
    2. 然后将数据库文件从顶点本地目录读取到输出流中,以便将文件复制到 ADLS 中。
    3. 请注意,您需要在输出器上进行原子文件处理,以避免写入许多随后拼接在一起的数据库文件。

关于Azure Data Lake Analytics IOutputter 获取输出文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41532843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com