c# - 如何使用 Azure 函数将数据附加到 Azure blob 中的 parquet 文件

标签 c# azure azure-blob-storage azure-functions

我正在尝试使用 Azure 函数 c# 脚本附加到 Azure blob 中的 parquet 文件。

我已经能够使用 Parquet.net 包附加到本地创建的 parquet 文件。但是,当我尝试执行代码以附加到 Azure 中的 Parquet 文件时,我收到错误。

下面的代码适用于本地 Parquet 文件附加。

var ds = new DataSet(new DataField<int>("id"),new DataField<string>("city"));
ds.Add(1, "London");
using (Stream fileStream = File.Open(file, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
   ParquetWriter.Write(ds, fileStream,CompressionMethod.None,null,null, true);
   Console.Write("File writing completed successfully\n");
}

但是,下面的代码不适用于 Azure parquet 文件附加

var ds = new DataSet(new DataField<int>("id"),new DataField<string>("city"));
ds.Add(1, "London");
Stream stream = new MemoryStream();
ParquetWriter.Write(ds, stream,CompressionMethod.None,null,null, false);
parquetBlob.AppendBlock(stream); //this line fails with error

我收到以下错误:

2018-07-05T05:07:14.479 [Info] Parquet file writing started
2018-07-05T05:07:14.667 [Info] Parquet file writing : successfully written to memory stream
2018-07-05T05:07:14.686 [Info] Exception  while appending to parquet file: Microsoft.WindowsAzure.Storage.StorageException: The remote server returned an error: (400) Bad Request. ---> System.Net.WebException: The remote server returned an error: (400) Bad Request.
   at System.Net.HttpWebRequest.GetResponse()
   at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 677
   --- End of inner exception stack trace ---
   at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Core\Executor\Executor.cs:line 604
   at Microsoft.WindowsAzure.Storage.Blob.CloudAppendBlob.AppendBlock(Stream blockData, String contentMD5, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext) in c:\Program Files (x86)\Jenkins\workspace\release_dotnet_master\Lib\ClassLibraryCommon\Blob\CloudAppendBlob.cs:line 2145
   at Submission#0.writeParquet(String data, CloudAppendBlob parquetBlob, TraceWriter log) in D:\home\site\wwwroot\EventHubTriggerCSharp2\run.csx:line 189
   at Submission#0.WriteToBlob(String fileName, String data, TraceWriter log) in D:\home\site\wwwroot\EventHubTriggerCSharp2\run.csx:line 158
Request Information
RequestID:45299e54-001e-009d-7d1e-143e91000000
RequestDate:Thu, 05 Jul 2018 05:07:13 GMT
StatusMessage:The value for one of the HTTP headers is not in the correct format.
ErrorCode:InvalidHeaderValue

任何帮助将不胜感激。

最佳答案

@Gaurav 为我们指明了道路。

The value for one of the HTTP headers is not in the correct format.如果我们检查RequestInformation,我们会发现Content-Length为0。

在将流附加到 blob 之前,您需要先将流返回到开头。

添加stream.Position = 0之前parquetBlob.AppendBlock(stream);

关于c# - 如何使用 Azure 函数将数据附加到 Azure blob 中的 parquet 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51183800/

相关文章:

c# - Random.Next() 在发生回绕之前有多少次迭代?

c# - 将音量增加 X 分贝并重写音频文件

python - Azure Python 下载存储 blob 返回 'The condition specified using HTTP conditional header(s) is not met.'

Azure Blob 存储 - $logs 容器中的 listblob

javascript - 如何使用 token 而不是 azure 连接字符串进行 blob 存储访问

c# - 在 C# 中使用 new 关键字继承

c# - 如何在 Xaml 中的文本中包含电子邮件链接?

azure - 调用 webapi 抛出 No Access-Control-Allow-Origin header 出现在请求的资源上

Azure:无法检索用户的个人资料照片并上传到 Azure Blob 存储

azure - 我们可以使用 Azure CLI 在 azure 专用端点中设置 2 个静态 IP