code: def _discrete_read_data(
      self, custom_reward_expression=None, gamma=None, multi_steps=None
  ):
      ts = TableSpec(table_name=self.table_name)
      df = OssDataFetcher()
      dataset: Dataset = df.query_data(
          input_table_spec=ts,
          discrete_action=True,
          actions=["L", "R", "U", "D"],
          custom_reward_expression=custom_reward_expression,
          multi_steps=multi_steps,
          gamma=gamma,
      )
      df = self.sqlCtx.read.parquet(dataset.parquet_url)
      df = df.orderBy(asc("sequence_number"))
      logger.info("Read parquet dataframe: ")
      df.show()
      return df
  
file_path: ReAgent/reagent/test/workflow/test_query_data.py
imports: import logging
  import unittest
  import numpy
  import pytest
  from pyspark.sql.functions import asc
  from reagent.data.oss_data_fetcher import OssDataFetcher
  from reagent.test.test_data.ex_mdps import generate_discrete_mdp_pandas_df
  from reagent.test.workflow.reagent_sql_test_base import ReagentSQLTestBase
  from reagent.workflow.types import Dataset, TableSpec
label_desc: Use image node_id 3 for calling the TestQueryData obj's underlying member method code with example usage: obj._discrete_read_data(custom_reward_expression, gamma, multi_steps) and returns: df