code: def preprocess_and_save(data_tbl, models, save_path):
      columns = dict(
          [("_c{}".format(i), "c{}".format(i)) for i in range(40)]
      )
      data_tbl = data_tbl.rename(columns)
  
      data_tbl = data_tbl.encode_string(CAT_COLS, models).fillna(
          0, INT_COLS + CAT_COLS
      )
      data_tbl, min_max = data_tbl.min_max_scale(INT_COLS)
  
      data_tbl = data_tbl.cross_columns(
          crossed_columns=[CAT_COLS[0:2], CAT_COLS[2:4]],
          bucket_sizes=cross_sizes,
      )
  
      data_tbl = data_tbl.ordinal_shuffle_partition()
  
      data_tbl.write_parquet(save_path)
  
file_path: analytics-zoo/pyzoo/zoo/examples/friesian/wnd/wnd_preprocessing.py
imports: from zoo.friesian.feature import FeatureTable
  import os
  from argparse import ArgumentParser
  from time import time
  from functools import reduce
  from zoo.orca import init_orca_context, stop_orca_context
  from zoo.orca.data.file import makedirs, write_text, exists
  from zoo import init_nncontext
label_desc: Use image node_id 2 for calling a global function with example usage: preprocess_and_save(data_tbl, models, save_path) without return types