Scala 如何在spark streaming中打印数据流的最后n行?

Scala 如何在spark streaming中打印数据流的最后n行?,scala,spark-streaming,Scala,Spark Streaming,Spark streaming dstream print显示前10行,如 val fileDstream=ssc.textFileStreamhdfs://localhost:9000/abc.txt fileDstream.print 考虑到文本文件大且未排序,是否有办法获得最后n行 如果您这样做,您可以简化为: fileDstream.foreachRDD { rdd => rdd.collect().last } 但是,这存在将所有数据收集到驱动程序的问题 你

Spark streaming dstream print显示前10行,如 val fileDstream=ssc.textFileStreamhdfs://localhost:9000/abc.txt fileDstream.print
考虑到文本文件大且未排序,是否有办法获得最后n行

如果您这样做,您可以简化为:

fileDstream.foreachRDD { rdd =>
      rdd.collect().last
    }
但是,这存在将所有数据收集到驱动程序的问题

你的数据分类了吗?如果是这样的话,您可以反转排序并选择第一个。或者,hackey实现可能涉及mapPartitionsWithIndex,它为除最后一个分区之外的所有分区返回一个空迭代器。对于最后一个分区,您将过滤除迭代器中最后一个元素之外的所有元素。这将留下一个元素,这是您的最后一个元素

或者你也可以尝试一下

fileDstream.foreachRDD { rdd =>
  rdd.top(10)(reverseOrdering)
}

@普拉巴特:如果这个答案对你有效,请让它正确