如何从套接字读取流数据集?

时间:2017-06-30 13:52:56

标签: apache-spark spark-structured-streaming

下面的代码从套接字读取,但我没有看到任何输入进入作业。我有nc -l 1111正在运行并转储数据,但不确定为什么我的Spark作业无法从10.176.110.112:1111读取数据。

Dataset<Row> d = sparkSession.readStream().format("socket") 
                                    .option("host", "10.176.110.112")
                                    .option("port", 1111).load();

1 个答案:

答案 0 :(得分:2)

  

下面的代码从套接字读取,但我没有看到任何输入进入作业。

老实说,你从任何地方读取任何东西。您只是描述了启动流媒体管道时前往所做的事情。

由于您使用结构化流来从套接字读取数据集,因此您应该使用start运算符来触发数据提取(并且只有在定义了接收器之后才会这样做。)

  

start():StreamingQuery 开始执行流式查询,当新数据到达时,它将不断将结果输出到给定路径。返回的StreamingQuery对象可用于与流进行交互。

start之前,您应该定义流式传输数据的位置。它可能是Kafka,文件,自定义流式接收器(可能使用foreach运算符)或控制台。

我在以下示例中使用console sink(aka format)。我也使用Scala并将其重写为Java作为您的家庭练习。

d.writeStream.  // <-- this is the most important part
  trigger(Trigger.ProcessingTime("10 seconds")).
  format("console").
  option("truncate", false).
  start         // <-- and this