class_docstr: A datasink that writes one row to each file.
  
  Subclasses must implement ``write_row_to_file`` and call the superclass constructor.
  
  Examples:
      .. testcode::
  
          import io
          import numpy as np
          from PIL import Image
          from ray.data._internal.delegating_block_builder import DelegatingBlockBuilder
          from ray.data.datasource import FileBasedDatasource
  
          class ImageDatasource(FileBasedDatasource):
              def __init__(self, paths):
                  super().__init__(
                      paths,
                      file_extensions=["png", "jpg", "jpeg", "bmp", "gif", "tiff"],
                  )
  
              def _read_stream(self, f, path):
                  data = f.readall()
                  image = Image.open(io.BytesIO(data))
  
                  builder = DelegatingBlockBuilder()
                  array = np.array(image)
                  item = {"image": array}
                  builder.add(item)
                  yield builder.build()
docstr: Write a row to a file.
  
  Args:
      row: The row to write.
      file: The file to write the row to.
docstr_tok: ["Write","a","row","to","a","file",".","Args",":","row",":","The","row","to","write",".","file",":","The","file","to","write","the","row","to","."]
code: def write_row_to_file(
      self, row: Dict[str, Any], file: "pyarrow.NativeFile"
  ):
      """Write a row to a file.
  
      Args:
          row: The row to write.
          file: The file to write the row to.
      """
      raise NotImplementedError
  
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 1 for calling the RowBasedFileDatasink obj's underlying member method code with example usage: obj.write_row_to_file(row, file) without return types