Я создал веб-сканер в рамках своей диссертации.Это выполняется каждую минуту и получает данные - около 50-200 строк в каждой итерации.
Я могу легко сериализовать данные с помощью Parquet.NET, но добавить их выглядит невозможно.
Первая сериализация, выполненная в Crawler и добавление в Serializator class.
public static void SaveTripsToShema(IEnumerable<SimpleTripData> data)
{
var ct = new DataField<long>("CurrentTime");
var lat = new DataField<double>("Latitude");
var lng = new DataField<double>("Longitude");
var route = new DataField<string>("RouteID");
var trip = new DataField<string>("TripID");
var veichle = new DataField<string>("VeichleID");
var model = new DataField<string>("Model");
var status = new DataField<string>("Status");
var ms = new MemoryStream();
ms.Position = 0;
using (var writer = new ParquetWriter(new Schema(ct, lat, lng, route, trip, veichle, model, status), ms, append:true))
{
using (ParquetRowGroupWriter rg = writer.CreateRowGroup())
{
rg.WriteColumn(new DataColumn(ct, data.Select((x) => x.CurrentTime).ToArray<long>()));
rg.WriteColumn(new DataColumn(lat, data.Select((x) => x.Latitude).ToArray<double>()));
rg.WriteColumn(new DataColumn(lng, data.Select((x) => x.Longitude).ToArray<double>()));
rg.WriteColumn(new DataColumn(route, data.Select((x) => x.RouteID).ToArray<string>()));
rg.WriteColumn(new DataColumn(trip, data.Select((x) => x.TripID).ToArray<string>()));
rg.WriteColumn(new DataColumn(veichle, data.Select((x) => x.VeichleID).ToArray<string>()));
rg.WriteColumn(new DataColumn(model, data.Select((x) => x.Model).ToArray<string>()));
rg.WriteColumn(new DataColumn(status, data.Select((x) => x.Status).ToArray<string>()));
}
}
ms.CopyTo(File.OpenWrite(trip_path));
}
Искатель сталкивается с проблемой, которая дает System.IO.IOException: 'An attempt was made to move the position before the beginning of the stream.