TableRow
не является типом данных, который наверняка будет детерминированным.Например, если вы хотите сериализовать в JSON, один и тот же элемент типа TableRow может выглядеть следующим образом:
{"name":"rajan", "language":"java"}
vs {"language":"java", "name":"rajan"}
Это два разных недетерминированные способы сериализации одного и того же объекта, и, таким образом, если вы используете этот тип данных в качестве ключа, он не будет действительным.
Вместо этого вы можете использовать преобразованиеВаш объект в пары ключ-значение, которые имеют детерминированный ключ.Например:
PCollection<TableRow> uniqueCollection = p.apply("ReadCustomers",BigQueryIO.readTableRows()
.from(options.getCustomers()));
.apply(WithKeys.of(new SerializableFunction<TableRow, Integer>() {
public Integer apply(TableRow row) { return row.getUniqueId(); } })))
.apply(Values<TableRow>.create());