Apache Flink - Concetti API

Flink ha un ricco set di API che utilizzano le quali gli sviluppatori possono eseguire trasformazioni su dati batch e in tempo reale. Una varietà di trasformazioni include mappatura, filtraggio, ordinamento, unione, raggruppamento e aggregazione. Queste trasformazioni di Apache Flink vengono eseguite sui dati distribuiti. Parliamo delle diverse API offerte da Apache Flink.

API del set di dati

L'API del set di dati in Apache Flink viene utilizzata per eseguire operazioni batch sui dati per un periodo. Questa API può essere utilizzata in Java, Scala e Python. Può applicare diversi tipi di trasformazioni ai set di dati come filtraggio, mappatura, aggregazione, unione e raggruppamento.

I set di dati vengono creati da fonti come file locali o leggendo un file da una particolare fonte ei dati dei risultati possono essere scritti su diversi sink come file distribuiti o terminale a riga di comando. Questa API è supportata dai linguaggi di programmazione Java e Scala.

Ecco un programma di conteggio parole dell'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

Questa API viene utilizzata per la gestione dei dati in flusso continuo. È possibile eseguire varie operazioni come il filtraggio, la mappatura, la creazione di finestre e l'aggregazione sui dati del flusso. Ci sono varie fonti su questo flusso di dati come code di messaggi, file, flussi di socket ei dati dei risultati possono essere scritti su diversi sink come il terminale della riga di comando. Entrambi i linguaggi di programmazione Java e Scala supportano questa API.

Ecco un programma di conteggio parole in streaming dell'API DataStream, in cui hai un flusso continuo di conteggi di parole ei dati sono raggruppati nella seconda finestra.

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));
         }
      }
   }
}