/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="input"></param> /// <param name="rowGroupIndex"></param> /// <returns></returns> public static T[] Deserialize <T>(Stream input, int rowGroupIndex = -1) where T : new() { var result = new List <T>(); using (var reader = new ParquetReader(input)) { Schema fileSchema = new SchemaReflector(typeof(T)).Reflect(); DataField[] dataFields = fileSchema.GetDataFields(); if (rowGroupIndex == -1) //Means read all row groups. { for (int i = 0; i < reader.RowGroupCount; i++) { T[] currentRowGroupRecords = ReadAndDeserializeByRowGroup <T>(i, reader, dataFields); result.AddRange(currentRowGroupRecords); } } else //read specific rowgroup. { T[] currentRowGroupRecords = ReadAndDeserializeByRowGroup <T>(rowGroupIndex, reader, dataFields); result.AddRange(currentRowGroupRecords); } } return(result.ToArray()); }