code: void storeInitialHashTable() throws IOException {
  		if (spilled) {
  			return; // we create the initialHashTable only once. Later calls are caused by deeper recursion lvls
  		}
  		spilled = true;
  		
  		for (int partIdx = 0; partIdx < initialPartitions.size(); partIdx++) {
  			final ReOpenableHashPartition<BT, PT> p = (ReOpenableHashPartition<BT, PT>) initialPartitions.get(partIdx);
  			if (p.isInMemory()) { // write memory resident partitions to disk
  				this.writeBehindBuffersAvailable += p.spillInMemoryPartition(spilledInMemoryPartitions.next(), ioManager, writeBehindBuffers);
  			}
  		}
  	}
docs: This method stores the initial hash table's contents on disk if hash join needs the memory
  for further partition processing.
  The initial hash table is rebuild before a new secondary input is opened.
  
  For the sake of simplicity we iterate over all in-memory elements and store them in one file.
  The file is hashed into memory upon opening a new probe input.
  @throws IOException