Apache Flink - Concepts d'API

Flink dispose d'un riche ensemble d'API à l'aide desquelles les développeurs peuvent effectuer des transformations à la fois sur des données par lots et en temps réel. Une variété de transformations comprend le mappage, le filtrage, le tri, la jonction, le regroupement et l'agrégation. Ces transformations par Apache Flink sont effectuées sur des données distribuées. Parlons des différentes API qu'offre Apache Flink.

API de l'ensemble de données

L'API de jeu de données dans Apache Flink est utilisée pour effectuer des opérations par lots sur les données sur une période. Cette API peut être utilisée en Java, Scala et Python. Il peut appliquer différents types de transformations sur les ensembles de données comme le filtrage, le mappage, l'agrégation, la jonction et le regroupement.

Les ensembles de données sont créés à partir de sources telles que des fichiers locaux ou en lisant un fichier à partir d'une source particulière et les données de résultat peuvent être écrites sur différents puits tels que des fichiers distribués ou un terminal de ligne de commande. Cette API est prise en charge par les langages de programmation Java et Scala.

Voici un programme Wordcount de l'API Dataset -

public class WordCountProg {
   public static void main(String[] args) throws Exception {
      final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

      DataSet<String> text = env.fromElements(
      "Hello",
      "My Dataset API Flink Program");

      DataSet<Tuple2<String, Integer>> wordCounts = text
      .flatMap(new LineSplitter())
      .groupBy(0)
      .sum(1);

      wordCounts.print();
   }

   public static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
      @Override
      public void flatMap(String line, Collector<Tuple2<String, Integer>> out) {
         for (String word : line.split(" ")) {
            out.collect(new Tuple2<String, Integer>(word, 1));
         }
      }
   }
}

API DataStream

Cette API est utilisée pour gérer les données en flux continu. Vous pouvez effectuer diverses opérations telles que le filtrage, le mappage, le fenêtrage, l'agrégation sur les données de flux. Il existe différentes sources sur ce flux de données comme les files d'attente de messages, les fichiers, les flux de socket et les données de résultat peuvent être écrites sur différents récepteurs comme un terminal de ligne de commande. Les langages de programmation Java et Scala prennent en charge cette API.

Voici un programme Wordcount en continu de l'API DataStream, où vous avez un flux continu de comptage de mots et les données sont regroupées dans la deuxième fenêtre.

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.util.Collector;
public class WindowWordCountProg {
   public static void main(String[] args) throws Exception {
      StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
      DataStream<Tuple2<String, Integer>> dataStream = env
      .socketTextStream("localhost", 9999)
      .flatMap(new Splitter())
      .keyBy(0)
      .timeWindow(Time.seconds(5))
      .sum(1);
      dataStream.print();
      env.execute("Streaming WordCount Example");
   }
   public static class Splitter implements FlatMapFunction<String, Tuple2<String, Integer>> {
      @Override
      public void flatMap(String sentence, Collector<Tuple2<String, Integer>> out) throws Exception {
         for (String word: sentence.split(" ")) {
            out.collect(new Tuple2<String, Integer>(word, 1));
         }
      }
   }
}