@Override public Iterable<T> get(byte[] key, W window) { return checkNotNull( (Iterable<T>) runnerHandler.getIterable(collection, window), "Element processed by SDK before side input is ready"); }
@Override public Iterable<T> get(byte[] key, W window) { return checkNotNull( (Iterable<T>) runnerHandler.getIterable(collection, window), "Element processed by SDK before side input is ready"); }
@Override public Iterable<V> get(byte[] key, W window) { Iterable<KV<K, V>> values = (Iterable<KV<K, V>>) runnerHandler.getIterable(collection, window); ArrayList<V> result = new ArrayList<>(); // find values for the given key for (KV<K, V> kv : values) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { keyCoder.encode(kv.getKey(), bos); if (Arrays.equals(key, bos.toByteArray())) { result.add(kv.getValue()); } } catch (IOException ex) { throw new RuntimeException(ex); } } return result; }
@Override public Iterable<V> get(byte[] key, W window) { Iterable<KV<K, V>> values = (Iterable<KV<K, V>>) runnerHandler.getIterable(collection, window); ArrayList<V> result = new ArrayList<>(); // find values for the given key for (KV<K, V> kv : values) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { keyCoder.encode(kv.getKey(), bos); if (Arrays.equals(key, bos.toByteArray())) { result.add(kv.getValue()); } } catch (IOException ex) { throw new RuntimeException(ex); } } return result; }
@Nullable @Override public <T> T get(PCollectionView<T> view, BoundedWindow window) { Iterable<?> elements = getIterable(view, window); // TODO: Add support for choosing which representation is contained based upon the // side input materialization. We currently can assume that we always have a multimap // materialization as that is the only supported type within the Java SDK. ViewFn<MultimapView, T> viewFn = (ViewFn<MultimapView, T>) view.getViewFn(); Coder<?> keyCoder = ((KvCoder<?, ?>) view.getCoderInternal()).getKeyCoder(); return (T) viewFn.apply(InMemoryMultimapSideInputView.fromIterable(keyCoder, (Iterable) elements)); }