예제 #1
0
        /// <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());
        }