code: def _write_ndarrays(images, labels, output_path, **kwargs):
      images_shape = [int(x) for x in images.shape[1:]]
      labels_shape = [int(x) for x in labels.shape[1:]]
      schema = {
          "image": SchemaField(
              feature_type=FeatureType.NDARRAY,
              dtype=ndarray_dtype_to_dtype(images.dtype),
              shape=images_shape,
          ),
          "label": SchemaField(
              feature_type=FeatureType.NDARRAY,
              dtype=ndarray_dtype_to_dtype(labels.dtype),
              shape=labels_shape,
          ),
      }
  
      def make_generator():
          for i in range(images.shape[0]):
              yield {"image": images[i], "label": labels[i]}
  
      ParquetDataset.write(
          output_path, make_generator(), schema, **kwargs
      )
  
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 5 for calling a global function with example usage: _write_ndarrays(images, labels, output_path) without return types