C# 将文件创建为流并上载到Azure
我正在使用ChoETL和ChoETL.Parquet库根据一些其他数据创建一个拼花文件。我可以在本地创建文件C# 将文件创建为流并上载到Azure,c#,azure,parquet,choetl,C#,Azure,Parquet,Choetl,我正在使用ChoETL和ChoETL.Parquet库根据一些其他数据创建一个拼花文件。我可以在本地创建文件 using (ChoParquetWriter parser = new ChoParquetWriter($"..\\..\\..\\parquet_files\\{club}_events.parquet")) { parser.Write(events); } 在此代码段中,事件是包含字符串的对象列表。它们
using (ChoParquetWriter parser = new ChoParquetWriter($"..\\..\\..\\parquet_files\\{club}_events.parquet"))
{
parser.Write(events);
}
在此代码段中,事件是包含字符串的对象列表。它们将转换为拼花数据
到目前为止,我已经编写了上传到Azure的代码,但它需要一个本地文件作为输入
BlobServiceClient BlobServiceClient = new BlobServiceClient("REDACTED");
var containerClient = BlobServiceClient.GetBlobContainerClient("base-test");
BlobClient blobClient = containerClient.GetBlobClient($"Base/{RequestTime.Year}/{RequestTime.Month}/{RequestTime.Day}/{RequestTime.Hour}/{RequestTime.Minute}/events.parquet");
using FileStream uploadFileStream = File.OpenRead("..\\..\\..\\events.parquet");
await blobClient.UploadAsync(uploadFileStream, true);
uploadFileStream.Close();
我需要在内存中创建它,然后上传到Azure blob存储。我该怎么做?澄清:我需要上传拼花地板文件。关于这个问题,您可以使用方法
BlockBlobClient.OpenWriteAsync
获取流,并为ChoParquetWriter
提供流。然后,编写器将直接将内容写入Azure blob
比如说
List<EmployeeRecSimple> objs = new List<EmployeeRecSimple>();
EmployeeRecSimple rec1 = new EmployeeRecSimple();
rec1.Id = 1;
rec1.Name = "Mark";
objs.Add(rec1);
EmployeeRecSimple rec2 = new EmployeeRecSimple();
rec2.Id = 2;
rec2.Name = "Jason";
objs.Add(rec2);
BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
var desContainer = blobServiceClient.GetBlobContainerClient("output");
var desBlob= desContainer.GetBlockBlobClient("my.parquet");
var options = new BlockBlobOpenWriteOptions {
HttpHeaders = new BlobHttpHeaders {
ContentType = MimeMapping.GetMimeMapping("parquet"),
},
// progress updates about data transfers
ProgressHandler = new Progress<long> (
progress => Console.WriteLine("Progress: {0} bytes written", progress))
};
using (var outStream = await desBlob.OpenWriteAsync(true, options).ConfigureAwait(false))
using (ChoParquetWriter parser = new ChoParquetWriter(outStream)) {
parser.Write(objs);
}
public partial class EmployeeRecSimple
{
public int Id { get; set; }
public string Name { get; set; }
}
List objs=new List();
EmployeeRecSimple rec1=新EmployeeRecSimple();
rec1.Id=1;
rec1.Name=“Mark”;
对象添加(rec1);
EmployeeRecSimple rec2=新EmployeeRecSimple();
rec2.Id=2;
rec2.Name=“Jason”;
对象添加(rec2);
BlobServiceClient BlobServiceClient=新BlobServiceClient(connectionString);
var desccontainer=blobServiceClient.GetBlobContainerClient(“输出”);
var desBlob=desccontainer.GetBlockBlobClient(“my.parquet”);
var options=新BlockBlobOpenWriteOptions{
HttpHeaders=新BlobHttpHeaders{
ContentType=MimeMapping.GetMimeMapping(“拼花”),
},
//有关数据传输的最新进展
ProgressHandler=新进度(
progress=>Console.WriteLine(“progress:{0}字节写入”,progress))
};
使用(var outStream=await desBlob.OpenWriteAsync(true,options.ConfigureAwait(false))
使用(ChoParquetWriter解析器=新的ChoParquetWriter(扩展)){
Write(objs);
}
公共部分类EmployeeRecSimple
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
失败的
没有太多说明。您是否遇到编译或运行时错误?这只是我尝试过的一行。现在我给它的拼花文件的路径,它的工作。你想通过MemoryStream上传一些东西吗?是的……但是我认为我不能用这个库来做这件事,因为你需要给它一个路径,这个路径有效!!非常感谢。