C# 如何使用C访问Avro.snz文件中的数据#
我有一个Avro.snz文件 avro.codecs很快 这可以通过Spark中的com.databricks.avro打开,但Apache.avro和Confluent.avro似乎不支持snappy,它们只有deflate和null。虽然他们可以给我模式,但我无法得到数据 下一个方法获取错误。Ironsnappy也无法解压缩该文件,它说输入是错误的C# 如何使用C访问Avro.snz文件中的数据#,c#,avro,snappy,spark-avro,C#,Avro,Snappy,Spark Avro,我有一个Avro.snz文件 avro.codecs很快 这可以通过Spark中的com.databricks.avro打开,但Apache.avro和Confluent.avro似乎不支持snappy,它们只有deflate和null。虽然他们可以给我模式,但我无法得到数据 下一个方法获取错误。Ironsnappy也无法解压缩该文件,它说输入是错误的 using (Avro.File.IFileReader<generic> reader = Avro.File.DataFileR
using (Avro.File.IFileReader<generic> reader = Avro.File.DataFileReader<generic>.OpenReader(avro_path))
{
schema = reader.GetSchema();
Console.WriteLine(reader.HasNext()); //true
var hi = reader.Next(); // error
Console.WriteLine(hi.ElementAt(0).ToString()); // error
}
使用(Avro.File.IFileReader reader=Avro.File.DataFileReader.OpenReader(Avro_路径))
{
schema=reader.GetSchema();
Console.WriteLine(reader.HasNext());//true
var hi=reader.Next();//错误
Console.WriteLine(hi.ElementAt(0.ToString());//错误
}
我开始怀疑Azure HDInsight库中是否有任何内容,但我似乎找不到nuget软件包,它为我提供了一种阅读支持Snappy压缩的Avro的方法
我对任何解决方案都持开放态度,即使这意味着下载Apache.Avro的源代码并手动添加Snappy支持,但老实说,我是一个新手,甚至不知道压缩是如何工作的,更不用说添加对库的支持了
有人能帮忙吗
更新:
只是将snappy编解码器添加到Apache.Avro并将DeflateStream更改为Ironsnappy流失败。它再次提供了损坏的输入。是否有任何地方可以用C#打开Snappy压缩的Avro文件
或者,我如何确定Avro的哪个部分是snappy压缩的,并将其传递给Ironsnappy。好的,所以对此没有任何评论。但我最终解决了我的问题。下面是我如何解决它的
public override byte[] Decompress(byte[] compressedData)
{
int snappySize = compressedData.Length - 4;
byte[] compressedSnappy_Data = new byte[snappySize];
System.Array.Copy(compressedData, compressedSnappy_Data, snappySize);
byte[] result = IronSnappy.Snappy.Decode(compressedSnappy_Data);
return result;
}
我不知道如何使用校验和,也不需要使用校验和,至少现在不行。我完全忽略了压缩函数
但是如果你真的想要我的压缩函数,它就在这里
public override byte[] Compress(byte[] uncompressedData)
{
return new byte[0];
}
好的,甚至没有任何评论。但我最终解决了我的问题。以下是我如何解决的
public override byte[] Compress(byte[] uncompressedData)
{
return new byte[0];
}
ResultModel resultObject = AvroConvert.Deserialize<ResultModel>(byte[] avroObject);