class_docstr: IterDataPipe that can be used to stream either the Criteo 1TB Click Logs Dataset
  (https://ailab.criteo.com/download-criteo-1tb-click-logs-dataset/) or the
  Kaggle/Criteo Display Advertising Dataset
  (https://www.kaggle.com/c/criteo-display-ad-challenge/) from the source TSV
  files.
  
  Args:
      paths (Iterable[str]): local paths to TSV files that constitute the Criteo
          dataset.
      row_mapper (Optional[Callable[[List[str]], Any]]): function to apply to each
          split TSV line.
      open_kw: options to pass to underlying invocation of
          iopath.common.file_io.PathManager.open.
  
  Example::
  
      datapipe = CriteoIterDataPipe(
          ("/home/datasets/criteo/day_0.tsv", "/home/datasets/criteo/day_1.tsv")
      )
      datapipe = dp.iter.Batcher(datapipe, 100)
      datapipe = dp.iter.Collator(datapipe)
      batch = next(iter(datapipe))
class_docstr_tok: ["IterDataPipe","that","can","be","used","to","stream","either","the","Criteo","1TB","Click","Logs","Dataset","(","https",":","\/\/ailab.criteo.com\/download-criteo-1tb-click-logs-dataset\/",")","or","the","Kaggle\/Criteo","Display","Advertising","Dataset","(","https",":","\/\/www.kaggle.com\/c\/criteo-display-ad-challenge\/",")","from","the","source","TSV","files",".","Args",":","paths","(","Iterable","[","str","]",")",":","local","paths","to","TSV","files","that","constitute","the","Criteo","dataset",".","row_mapper","(","Optional","[","Callable","[","[","List","[","str","]","]",",","Any","]","]",")",":","function","to","apply","to","each","split","TSV","line",".","open_kw",":","options","to","pass","to","underlying","invocation","of","iopath.common.file_io.PathManager.open",".","Example",":",":","datapipe","=","CriteoIterDataPipe","(","(","``","\/home\/datasets\/criteo\/day_0.tsv","''",",","``","\/home\/datasets\/criteo\/day_1.tsv","''",")",")","datapipe","=","dp.iter.Batcher","(","datapipe",",","100",")","datapipe","=","dp.iter.Collator","(","datapipe",")","batch","=","next","(","iter","(","datapipe",")",")"]
code: def __iter__(self) -> Iterator[Any]:
      worker_info = torch.utils.data.get_worker_info()
      paths = self.paths
      if worker_info is not None:
          paths = (
              path
              for (idx, path) in enumerate(paths)
              if idx % worker_info.num_workers == worker_info.id
          )
      datapipe = LoadFiles(paths, mode="r", **self.open_kw)
      datapipe = ReadLinesFromCSV(datapipe, delimiter="\t")
      if self.row_mapper:
          datapipe = dp.iter.Mapper(datapipe, self.row_mapper)
      yield from datapipe
  
imports: import os
  import shutil
  import time
  from typing import Any, Callable, Dict, Iterable, Iterator, List, Optional, Tuple, Union
  import numpy
  import torch
  import torch.utils.data.datapipes
  from iopath.common.file_io import PathManager, PathManagerFactory
  from pyre_extensions import none_throws
  from torch.utils.data import IterableDataset, IterDataPipe
  from torchrec.datasets.utils import Batch, LoadFiles, PATH_MANAGER_KEY, ReadLinesFromCSV, safe_cast
  from torchrec.sparse.jagged_tensor import KeyedJaggedTensor
label_desc: Use image node_id 2 for calling the CriteoIterDataPipe obj's underlying member method code with example usage: obj.__iter__() without return types