class_docstr: The default file metadata provider for ParquetDatasource.
  
  Aggregates total block bytes and number of rows using the Parquet file metadata
  associated with a list of Arrow Parquet dataset file fragments.
code: def prefetch_file_metadata(
      self,
      fragments: List["pyarrow.dataset.ParquetFileFragment"],
      **ray_remote_args,
  ) -> Optional[List["pyarrow.parquet.FileMetaData"]]:
      from ray.data.datasource.parquet_datasource import (
          FRAGMENTS_PER_META_FETCH,
          PARALLELIZE_META_FETCH_THRESHOLD,
          _fetch_metadata,
          _fetch_metadata_serialization_wrapper,
          _SerializedFragment,
      )
  
      if len(fragments) > PARALLELIZE_META_FETCH_THRESHOLD:
          # Wrap Parquet fragments in serialization workaround.
          fragments = [
              _SerializedFragment(fragment) for fragment in fragments
          ]
          # Fetch Parquet metadata in parallel using Ray tasks.
          return list(
              _fetch_metadata_parallel(
                  fragments,
                  _fetch_metadata_serialization_wrapper,
                  FRAGMENTS_PER_META_FETCH,
                  **ray_remote_args,
              )
          )
      else:
          return _fetch_metadata(fragments)
  
imports: import itertools
  import logging
  import os
  import pathlib
  import re
  from typing import TYPE_CHECKING, Any, Callable, Iterator, List, Optional, Tuple, TypeVar, Union
  import numpy
  from ray.data._internal.progress_bar import ProgressBar
  from ray.data._internal.remote_fn import cached_remote_fn
  from ray.data.block import BlockMetadata
  from ray.data.datasource.partitioning import Partitioning
  from ray.util.annotations import DeveloperAPI
label_desc: Use image node_id 2 for calling the DefaultParquetMetadataProvider obj's underlying member method code with example usage: obj.prefetch_file_metadata(fragments) and returns: list, _fetch_metadata