Cálculo de datos de socket en tiempo real:
preparación
nc -lk 9999
hadoop spark sqoop hadoop spark hive hadoop
Código de demostración:
def main (args: Array [String]): Unit = {
// 1 Crear sparksession
val spark: SparkSession = SparkSession.builder ()
.master (“local [*]”)
.appName (“StructStreaming_socket”)
.getOrCreate ()
val sc: SparkContext = spark.sparkContext
sc.setLogLevel ("WARN")
// 2 El tipo de datos en tiempo real de la lectura es Row
val socketDatasRow: DataFrame = spark.readStream.option ("host", "hadoop01").
option ("port "," 9999 ")
.format (" socket ")
.load ()
// 3 Procesamiento de datos y cálculo
import spark.implicits._
val socketDatasString: Dataset [String] = socketDatasRow.as [String]
val Word: Dataset [String] = socketDatasString.flatMap (a => {a.split ("")})
// Use DSL (SQL) para calcular los datos
val StructWordCount: Dataset [Row] = Word.groupBy ("value"). count (). sort ($ "count")
// 4 output (start-wait for shutdown)
StructWordCount.writeStream
.trigger (Trigger.ProcessingTime (0) ) // Ejecutar lo antes posible.format
("consola") // Salida de datos a la consola.
OutputMode ("complete") // Salida de todos los datos.start () //
Iniciar
cálculo.awaitTerminación () // = Esperar para cerrar
}