Spark streaming dstream print()显示前10行,如
val fileDstream = ssc.textFileStream("hdfs://localhost:9000/abc.txt")
fileDstream.print()
考虑到文本文件大小且未排序,是否有办法获取最后n
行?
答案 0 :(得分:1)
如果你这样做,你可以简化为:
fileDstream.foreachRDD { rdd =>
rdd.collect().last
}
但是,这会产生向驱动程序收集所有数据的问题。
您的数据是否已排序?如果是这样,您可以撤消排序并采取第一个。或者,hackey实现可能涉及mapPartitionsWithIndex,它返回除最后一个之外的所有分区的空迭代器。对于最后一个分区,您将过滤除迭代器中最后一个元素之外的所有元素。这应该留下一个元素,这是你的最后一个元素。
或者您也可以尝试使用
fileDstream.foreachRDD { rdd =>
rdd.top(10)(reverseOrdering)
}