code: def test_dataframe_shard_size_train_eval(self):
      from zoo.orca import OrcaContext
  
      OrcaContext._shard_size = 30
      sc = init_nncontext()
      rdd = sc.range(0, 100)
      df = rdd.map(
          lambda x: (
              np.random.randn(50).astype(np.float).tolist(),
              [int(np.random.randint(0, 2, size=()))],
          )
      ).toDF(["feature", "label"])
  
      estimator = get_estimator(workers_per_node=2)
      estimator.fit(
          df,
          batch_size=4,
          epochs=2,
          feature_cols=["feature"],
          label_cols=["label"],
      )
      estimator.evaluate(
          df,
          batch_size=4,
          feature_cols=["feature"],
          label_cols=["label"],
      )
  
imports: import os
  from unittest import TestCase
  import numpy
  import pytest
  import torch
  import torch.nn
  from zoo.orca import OrcaContext
  from zoo.orca.data.pandas import read_csv
  from zoo.orca.learn.metrics import Accuracy
  from zoo import init_nncontext
  from zoo.orca.learn.pytorch import Estimator
  from zoo.orca.data import SparkXShards
  from zoo.orca.data.image.utils import chunks
label_desc: Use image node_id 4 for calling the TestPyTorchEstimator obj's underlying member method code with example usage: obj.test_dataframe_shard_size_train_eval() without return types