docstr: Create a directory to write files to.
  
  If ``try_create_dir`` is ``False``, this method is a no-op.
docstr_tok: ["Create","a","directory","to","write","files","to",".","If","``","try_create_dir","``","is","``","False","``",",","this","method","is","a","no-op","."]
code: def on_write_start(self) -> None:
      """Create a directory to write files to.
  
      If ``try_create_dir`` is ``False``, this method is a no-op.
      """
      from pyarrow.fs import FileType
  
      if self.try_create_dir:
          if (
              self.filesystem.get_file_info(self.path).type
              is FileType.NotFound
          ):
              # Arrow's S3FileSystem doesn't allow creating buckets by default, so we
              # add a query arg enabling bucket creation if an S3 URI is provided.
              tmp = _add_creatable_buckets_param_if_s3_uri(self.path)
              self.filesystem.create_dir(tmp, recursive=True)
              self.has_created_dir = True
  
imports: import posixpath
  import warnings
  from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Optional
  from ray._private.utils import _add_creatable_buckets_param_if_s3_uri
  from ray.data._internal.dataset_logger import DatasetLogger
  from ray.data._internal.execution.interfaces import TaskContext
  from ray.data._internal.util import _is_local_scheme, call_with_retry
  from ray.data.block import Block, BlockAccessor
  from ray.data.context import DataContext
  from ray.data.datasource.block_path_provider import BlockWritePathProvider
  from ray.data.datasource.datasink import Datasink
  from ray.data.datasource.filename_provider import FilenameProvider, _DefaultFilenameProvider
  from ray.data.datasource.path_util import _resolve_paths_and_filesystem
  from ray.util.annotations import DeveloperAPI
label_desc: Use image node_id 3 for calling the _FileDatasink obj's underlying member method code with example usage: obj.on_write_start() without return types