class_docstr: DoFn that extracts a unique fingerprint for each example.
  
  This class computes fingerprints by combining the identifier features.
class_docstr_tok: ["DoFn","that","extracts","a","unique","fingerprint","for","each","example",".","This","class","computes","fingerprints","by","combining","the","identifier","features","."]
code: def process(self, example: tf.train.Example):
      serialized_feature_values = []
      for identifier_feature in self._identifier_features:
          feature = example.features.feature.get(identifier_feature)
          if _empty_or_null(feature):
              _EXAMPLES_WITH_MISSING_IDENTIFIER_COUNTER.inc()
              yield beam.pvalue.TaggedOutput(_MISSING_IDS_KEY, 1)
              return
          else:
              serialized_feature_values.append(
                  _get_serialized_feature(
                      feature, self._float_round_ndigits
                  )
              )
      keyed_example = (
          str(
              farmhash.fingerprint64("".join(serialized_feature_values))
          ),
          example,
      )
      yield beam.pvalue.TaggedOutput(_KEYED_EXAMPLE_KEY, keyed_example)
  
imports: from typing import Any, Dict, Iterable, Iterator, List, Optional, Tuple, Union
  import apache_beam
  import farmhash
  import numpy
  import tensorflow
  from tensorflow_data_validation import constants
  from tensorflow_data_validation import types
  from tensorflow_data_validation.utils import artifacts_io_impl
  from tensorflow_data_validation.skew.protos import feature_skew_results_pb2
label_desc: Use image node_id 2 for calling the _ExtractIdentifiers obj's underlying member method code with example usage: obj.process(example) without return types