code: def _split_row_groups_from_footers(dataset):
      """Split the row groups by reading the footers of the parquet pieces"""
  
      logger.info(
          "Recovering rowgroup information for the entire dataset. This can take a long time for datasets with "
          "large number of files. If this dataset was generated by Petastorm "
          '(i.e. by using "with materialize_dataset(...)") and you still see this message, '
          "this indicates that the materialization did not finish successfully."
      )
  
      thread_pool = futures.ThreadPoolExecutor()
  
      futures_list = [
          thread_pool.submit(_split_piece, piece, dataset.fs.open)
          for piece in dataset.pieces
      ]
      result = [item for f in futures_list for item in f.result()]
      thread_pool.shutdown()
      return result
  
imports: import json
  import logging
  import os
  from concurrent import futures
  from contextlib import contextmanager
  from operator import attrgetter
  from urllib.parse import urlparse
  from packaging import version
  from pyarrow import parquet
  from six.moves import cPickle
  from petastorm import utils
  from petastorm.etl.legacy import depickle_legacy_package_name_compatible
  from petastorm.fs_utils import FilesystemResolver, get_filesystem_and_path_or_paths, get_dataset_path
  from petastorm.unischema import Unischema
label_desc: Use image node_id 9 for calling a global function with example usage: _split_row_groups_from_footers(dataset) and returns: result