code: def read_as_tfdataset(
      path,
      output_types,
      config=None,
      output_shapes=None,
      *args,
      **kwargs,
  ):
      """
      return a orca.data.tf.data.Dataset
      :param path:
      :return:
      """
      path, _ = pa_fs(path)
      import tensorflow as tf
  
      schema_path = os.path.join(path, "_orca_metadata")
      j_str = open_text(schema_path)[0]
      schema = decode_schema(j_str)
  
      row_group = []
  
      for root, dirs, files in os.walk(path):
          for name in dirs:
              if name.startswith("chunk="):
                  chunk_path = os.path.join(path, name)
                  row_group.append(chunk_path)
  
      dataset = ParquetIterable(
          row_group=row_group,
          schema=schema,
          num_shards=config.get("num_shards"),
          rank=config.get("rank"),
      )
  
      return tf.data.Dataset.from_generator(
          dataset,
          output_types=output_types,
          output_shapes=output_shapes,
      )
  
imports: from pyspark import SparkContext
  from pyspark.sql import SparkSession
  from zoo import init_nncontext
  from zoo.orca.data import SparkXShards
  from zoo.orca.data.file import open_text, write_text
  from zoo.orca.data.image.utils import chunks, dict_to_row, row_to_dict, encode_schema, decode_schema, SchemaField, FeatureType, DType, ndarray_dtype_to_dtype, decode_feature_type_ndarray, pa_fs
  from zoo.orca.data.image.voc_dataset import VOCDatasets
  from bigdl.util.common import get_node_and_core_number
  import os
  import numpy
  import random
  import pyarrow.parquet
  import io
  import math
label_desc: Use image node_id 10 for calling a global function with example usage: read_as_tfdataset(path, output_types, config, output_shapes) and returns: tf