def DictReader(file_obj, columns=None):  # pylint: disable=invalid-name
    """
    Reader for a parquet file object.

    This function is a generator returning an OrderedDict for each row
    of data in the parquet file. Nested values will be flattend into the
    top-level dict and can be referenced with '.' notation (e.g. 'foo' -> 'bar'
    is referenced as 'foo.bar')

    :param file_obj: the file containing parquet data
    :param columns: the columns to include. If None (default), all columns
                    are included. Nested values are referenced with "." notation
    """
    footer = _read_footer(file_obj)
    keys = columns if columns else [s.name for s in
                                    footer.schema if s.type]

    for row in reader(file_obj, columns):
        yield OrderedDict(zip(keys, row))
Reader for a parquet file object.

    This function is a generator returning an OrderedDict for each row
    of data in the parquet file. Nested values will be flattend into the
    top-level dict and can be referenced with '.' notation (e.g. 'foo' -> 'bar'
    is referenced as 'foo.bar')

    :param file_obj: the file containing parquet data
    :param columns: the columns to include. If None (default), all columns
                    are included. Nested values are referenced with "." notation