如何在火花流中打印最后n行的dstream?

时间:2017-07-25 09:58:21

标签: scala spark-streaming

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

1 个答案:

答案 0 :(得分:1)

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

fileDstream.foreachRDD { rdd =>
      rdd.collect().last
    }

但是,这会产生向驱动程序收集所有数据的问题。

您的数据是否已排序?如果是这样,您可以撤消排序并采取第一个。或者,hackey实现可能涉及mapPartitionsWithIndex,它返回除最后一个之外的所有分区的空迭代器。对于最后一个分区,您将过滤除迭代器中最后一个元素之外的所有元素。这应该留下一个元素,这是你的最后一个元素。

或者您也可以尝试使用

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