我试图使用GeoMesa的Spark集成从GeoPackage文件中读取大约250万行。由于没有为这个DataStore
实现自定义的SpatialRDD,所以我必须使用GeoToolsSpatialRDDProvider
。对于具有10 k-100 k行的层,这可以完美地工作。然而,当我尝试加载具有数百万行的图层时,该过程永远不会结束。
我研究了GeoToolsSpatialRDDProvider
的实现,问题似乎是其中的rdd
方法试图将FeatureReader
迭代器转换为List
,以便它可以被SparkContext
并行化,但转换从未终止,Spark不断打印大量警告(主要是Futures超时),直到最终耗尽内存。
有没有一种方法可以在不增加Spark驱动程序内存的情况下使其更高效?
1条答案
按热度按时间nimxete21#
GeoToolsSpatialRDDProvider
是一种将数据导入Spark的简单方法,但它并不适用于繁重的工作负载。我不相信Spark有任何方法可以将数据从单个线程并行化到Spark集群中,而不首先将其加载到内存中。作为一种变通方法,您可以批量加载足够小的数据,然后对结果RDD进行联合。