code: def __init__(self, db: EvaDBDatabase, node: HashJoinProbePlan):
      super().__init__(db, node)
      self.predicate = node.join_predicate
      self.join_type = node.join_type
      self.probe_keys = node.probe_keys
      self.join_project = node.join_project
  
file_path: evadb/evadb/executor/hash_join_executor.py
imports: from typing import Iterator
  from evadb.database import EvaDBDatabase
  from evadb.executor.abstract_executor import AbstractExecutor
  from evadb.executor.executor_utils import apply_predicate, apply_project, instrument_function_expression_cost
  from evadb.models.storage.batch import Batch
  from evadb.plan_nodes.hash_join_probe_plan import HashJoinProbePlan
label_desc: Use image node_id 1 to create a new HashJoinExecutor object from inherited base classes: AbstractExecutor with example: obj = HashJoinExecutor(db, node)