2017-05-12 80 views
1

我们有很多日志,我们希望通过一些处理获取有意义的数据。这些日志文件非常庞大,结果也很大。pyspark rdd有没有分页?

我们已经建立了火花转换来完成spark集群中所需的工作。 经过所有不适合驱动程序内存的转换后,我有大量数据。因此,做一个rdd.collect()失败。

是否有任何分页在rdd中我们可以使用哪种动作? 有些东西像SQL中的限制。“SELECT * FROM table LIMIT 15,10”

或任何建议如何处理这种情况?

+0

如果结果如此之大,我只会将它写入磁盘,最简单的一个csv文件(只是谷歌它)。但也许我错过了一些东西。干杯。 – lrnzcig

回答

0

在大多数文档和文章中,我看到人们讨论'在Spark和RDD中不支持偏移量'。关于在Spark中支持OFFSET的一些讨论可以从旧的火花邮件链here中找到。而且,在分布式系统中,抵消访问可能会非常昂贵。如果是分页,我们感兴趣的是我们可以通过用索引过滤RDD来实现它。索引可以通过zipWithIndex()或zipWithUniqueId()documentation动作获得。在讨论herehere中给出了类似的答案。 下面给出SQL和Spark等价物。

SQL

select * from person limit 10, 10 

星火

result = rdd.zipWithIndex().filter(x => { x._2 >= 10 && x._2 < 20}).collect() 

希望能对有类似的情况有用的人。