API-интерфейс GeoTools — это один из способов получения данных из Hbase методом загрузки Geomesa, но когда я использую org.geotools.data.simple.SimpleFeatureCollection, кажется, что SimpleFeatureCollection.features() может управлять только Iterator, возникает одна проблема, в которой когда я хочу просмотреть результаты, метод iterator.hasNext() требует слишком много времени. Могу ли я получить данные пакетным способом из hbase в Geomesa не только с помощью Iterator?
как получить данные пакетом из hbase в Geomesa?
Ответы (1)
За кулисами выполняется некоторая пакетная обработка, но пакеты извлекаются лениво (т. е. при вызове hasNext
, если нет никаких локальных данных, он выполняет удаленную выборку). Упреждающим чтением HBase можно управлять с помощью системного свойства geomesa.hbase.client.scanner.caching.size
(см. здесь). Однако API GeoTools не предоставляет каких-либо пакетных механизмов.
Для простых случаев использования, если вы просто хотите получить все заранее, вы можете поместить итератор в ArrayList, а затем работать с ним. Чтобы избежать ожидания получения всего набора результатов, вы можете настроить потоки производитель/потребитель, чтобы один поток непрерывно выполнял предварительную выборку данных, а второй поток работал с полученными результатами.
Для более продвинутых вариантов использования вы можете использовать Spark (или map/reduce напрямую), чтобы сразу загрузить весь набор результатов.