hbase - 如何从 Geomesa 中的 hbase 批量获取数据?
问题描述
GeoTools api是Geomesa摄取方法从Hbase获取数据的一种方式,但是当我使用org.geotools.data.simple.SimpleFeatureCollection时,似乎只有一个Iterator可以被SimpleFeatureCollection.features()操作,出现一个问题当我想遍历结果时, iterator.hasNext() 方法花费太多时间,我可以从 Geomesa 中的 hbase 中批量获取数据,而不仅仅是 Iterator 吗?
解决方案
在幕后,进行了一些批处理,但是这些批处理是延迟获取的(即在调用 时hasNext
,如果没有任何本地数据,它将进行远程获取)。您可以通过系统属性控制 HBase 预读geomesa.hbase.client.scanner.caching.size
(参见此处)。然而,GeoTools API 不提供任何批处理机制。
对于简单的用例,如果您只想预先获取所有内容,则可以将迭代器拉入 ArrayList,然后对其进行操作。为了避免等待整个结果集被提取,您可以设置生产者/消费者线程,以便一个线程持续预取数据,第二个线程对返回的结果进行操作。
对于更高级的用例,您可以使用Spark(或直接 map/reduce)一次加载整个结果集。
推荐阅读
- here-api - Here API Routing - 避免未铺砌的道路
- mysql - 在 MySQL JSON 数据中使用 BETWEEN 比较 mysql 日期
- javascript - Z-index“中断”幻灯片单击按钮
- android - 在应用程序中使用相机或图库时,它会在按下 backButton 时崩溃
- rest - 为 REST API 设计 URI 的最佳方式
- python - 如何解决这个python错误?
- java - 每天在 AWS 中的特定时间安排一个 java 程序,并将返回的值存储在 Parse 服务器中
- java - Jpa 调用存储过程,无法在 ref_cursor 中转换时间戳
- javascript - 刷新 javascript 函数中的 PHP 变量
- java - 为了方便开发人员,我应该在接口中声明方法吗?