什么是正确使用Spark Streaming

时间:2017-06-15 23:46:55

标签: apache-spark spark-streaming

我正在使用spark streaming来处理大量数据。它包括两个步骤。第一步是检索数据并做一些基本处理,然后第二步是对数据进行实际处理。

dstream.foreachRDD ( rdd =>

  //Step 1: retrieve data from web
  val data = rdd.mapPartitions( partition =>
  {
      var finalResult = ArrayBuffer[String]()
      val results = Obatinfromwebandcleaning("path/to/web")
      results.foreach( result => finalResult += result )
      finalResult.iterator
  })

  //Step 2: handle data
  val data_df = sparkSession.read.json(data)
  val res_df = compute(data_df)
  res.write.json("path/to/storage")
)

奇怪的是,如果我单独运行第1步或第2步,它运行得非常快。但是当我将它们组合在一起时,它变得慢了5倍。我就是这样做的。

dstream.mapPartitions( partition =>
      {
          var finalResult = ArrayBuffer[String]()
          val results = Obatinfromwebandcleaning("path/to/web")
          results.foreach( result => finalResult += result )
          finalResult.iterator
      }).saveAsTextFiles("path/to/storage")

以上运行速度很快。

dstream.foreachRDD ( rdd =>

      //Step 2: handle data
      val data_df = sparkSession.read.json(rdd)
      val res_df = compute(data_df)
      res.write.json("path/to/storage")
)

这也很快。 但是,当我将上述两个步骤结合在一起时,它们运行得慢得多。

所以我想我以错误的方式使用了分区和foreachrdd。但只是想不通。

0 个答案:

没有答案