/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.dstream;
import java.util.concurrent.Future;
import java.util.stream.Stream;
/**
* Base strategy for defining execution strategies that can support Stream-like
* sequential and parallel aggregate operation in the distributable environment.
*
* @param <T> the type of streamable elements of this {@link ExecutableDStream}
*/
interface ExecutableDStream<T>{
/**
* Will execute the task represented by this {@link ExecutableDStream} returning the result
* as {@link Future} of {@link Stream} which represents the result of the entire execution.
* Such result itself consists of {@link Stream}s which represent the following:<br><br>
*
* If this {@link ExecutableDStream} is represented by the {@link DStream},
* then each {@link Stream} contained within the common result corresponds to individual
* result partition: <br>
* <pre>
* Stream - (handle to the entire result of the execution)
* |___ Stream - (partition-1)
* |___ Stream - (partition-2)
* |___ Stream - (partition-3)
* </pre>
* T - represents the result type<br>
* <br>
* This is an <i>terminal</i> operation.
*
* @param executionName the name of this execution
* @return result as java {@link Future} consisting of {@link Stream}s representing each
* result partition.
*/
Future<Stream<Stream<T>>> executeAs(String executionName);
/**
* Returns the name of this stream
*/
String getName();
}