Добавить в файл паркета с помощью Parquet.NET - PullRequest
0 голосов
/ 24 октября 2018

Я создал веб-сканер в рамках своей диссертации.Это выполняется каждую минуту и ​​получает данные - около 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.

...