title: Why doesn't 'tf.scatter_nd_update' support string?
body: <p>In my model, I need to maintain an extremely long 2-D variable tensor，which has several columns and many rows, and its dtype is string. In every training step, I need to update several individal rows of that tensor. 'tf.scatter_nd_update' meets my requirements perfectly，except that it doesn't support string. Is there any work-around ways to fix it? </p>
  
  <pre><code>Traceback (most recent call last):
    File "tensorflow/python/client/session.py", line 1278, in _do_call
      return fn(*args)
    File "tensorflow/python/client/session.py", line 1261, in _run_fn
      self._extend_graph()
    File "tensorflow/python/client/session.py", line 1295, in _extend_graph
      tf_session.ExtendSession(self._session)
  tensorflow.python.framework.errors_impl.InvalidArgumentError: No OpKernel was registered to support Op 'ScatterNdUpdate' with these attrs. Registered devices: [CPU], Registered kernels:
    device='CPU'; T in [DT_COMPLEX128]; Tindices in [DT_INT64]
    device='CPU'; T in [DT_COMPLEX128]; Tindices in [DT_INT32]
    device='CPU'; T in [DT_COMPLEX64]; Tindices in [DT_INT64]
    device='CPU'; T in [DT_COMPLEX64]; Tindices in [DT_INT32]
    device='CPU'; T in [DT_DOUBLE]; Tindices in [DT_INT64]
    device='CPU'; T in [DT_DOUBLE]; Tindices in [DT_INT32]
    device='CPU'; T in [DT_FLOAT]; Tindices in [DT_INT64]
    device='CPU'; T in [DT_FLOAT]; Tindices in [DT_INT32]
    device='CPU'; T in [DT_BFLOAT16]; Tindices in [DT_INT64]
    device='CPU'; T in [DT_BFLOAT16]; Tindices in [DT_INT32]
    device='CPU'; T in [DT_HALF]; Tindices in [DT_INT64]
    device='CPU'; T in [DT_HALF]; Tindices in [DT_INT32]
    device='CPU'; T in [DT_INT8]; Tindices in [DT_INT64]
    device='CPU'; T in [DT_INT8]; Tindices in [DT_INT32]
    device='CPU'; T in [DT_UINT8]; Tindices in [DT_INT64]
    device='CPU'; T in [DT_UINT8]; Tindices in [DT_INT32]
    device='CPU'; T in [DT_INT16]; Tindices in [DT_INT64]
    device='CPU'; T in [DT_INT16]; Tindices in [DT_INT32]
    device='CPU'; T in [DT_UINT16]; Tindices in [DT_INT64]
    device='CPU'; T in [DT_UINT16]; Tindices in [DT_INT32]
    device='CPU'; T in [DT_INT32]; Tindices in [DT_INT64]
    device='CPU'; T in [DT_INT32]; Tindices in [DT_INT32]
    device='CPU'; T in [DT_INT64]; Tindices in [DT_INT64]
    device='CPU'; T in [DT_INT64]; Tindices in [DT_INT32]
  
           [[Node: ScatterNdUpdate = ScatterNdUpdate[T=DT_STRING, Tindices=DT_INT64, _class=["loc:@Variable"], use_locking=true](Variable, HashCollectiveAndUpdate, HashCollectiveAndUpdate:1)]]
  </code></pre>