Apache Arrow в ArcGIS

Apache Arrow - это кросс-платформенное, кросс-языковое, табличное представление данных в памяти с открытым исходным кодом, которое позволяет эффнктивно передавать данные между ресурсами. Многие проекты с большими данными работают с Arrow, что делает его удобным вариантом чтения и записи табличных файловых форматов без привязки к языку и платформе. Дополнительные сведения см. в документации к Apache Arrow, где имеются примеры использования и представлены проекты и продукты, использующие Apache Arrow.

Основное представление табличных данных в Arrow - это таблица Arrow. Таблица Arrow – это двухмерное табличное представление, в котором столбцы являются разделенными массивами Arrow. Интерфейсом для Arrow в Python является PyArrow. Дополнительные сведения см. в документации Apache Arrow и библиотека PyArrow Внешняя ссылка.

Таблицы и данные пространственных объектов

Вы можете преобразовывать таблицы и классы объектов в таблицу Arrow, используя функцию TableToArrowTable в модуле доступа к данным (arcpy.da).

Создайте таблицу Arrow.

import arcpy

infc = r'C:\data\usa.gdb\USA\counties'
arrow_table = arcpy.da.TableToArrowTable(infc)

Чтобы преобразовать таблицу Arrow в таблицу или класс объектов, используйте инструмент Копировать строки или Копировать объекты.

Создайте таблицу Arrow с нуля и преобразуйте ее в таблицу базы геоданных.

import arcpy
import pyarrow

# Create fields for schema so that data type can be specified
fields = [
    pyarrow.field('name', pyarrow.string()),
    pyarrow.field('state', pyarrow.string()),
    pyarrow.field('area_sqmi', pyarrow.float32())

]
# Create data (smallest and largest US county)
arrays = [
    pyarrow.array(['San Bernardino', 'Arlington']),
    pyarrow.array(['California', 'Virginia']),
    pyarrow.array([20105.32,  25.99])
]

# Create Arrow table from data and schema
pyarrow_table = pyarrow.Table.from_arrays(
    arrays=arrays,
    schema=pyarrow.schema(fields)
)

# Convert Arrow table to geodatabase table
counties = arcpy.management.CopyRows(
    pyarrow_table, r'C:\data\usa.gdb\USA\smallest_largest_county')

Таблицы Arrow можно использовать в качестве входных данных для любого инструмента геообработки, который принимает на входе таблицу или класс объектов, за исключением таких инструментов, меняющих входные данные, как Вычислить поле. Хотя инструмент геообработки может принимать на входе таблицу Arrow в качестве входных данных, на выходе будет не таблица Arrow, а таблица или класс объектов.

Конвертация типов

При преобразовании таблицы или класса пространственных объектов в таблицу Arrow с помощью функции TableToArrowTable типы данных в столбцах созданной таблицы Arrow (объекты pyarrow.ChunkedArray) определяются по типам полей входной таблицы или входного класса объектов.

Тип поляТип данных PyArrow

Short

int16

Long

int32

Float

float

Double

double

Text

string

Date

date64

Object ID

esri.oid (int64)

Geometry

esri.geometry (binary)

Поля других типов, не перечисленные выше, включая поля растра и BLOB, не конвертируются и будут удалены.

Примечание:

Текстовые поля обрезаются до 5000 символов при преобразовании в таблицу Arrow.

При преобразовании таблицы Arrow в таблицу или класс объектов с помощью инструмента геообработки типы полей выходной таблицы или класса объектов определяются типами данных столбцов входной таблицы Arrow. Поле Object ID будет автоматически добавлено в выходную таблицу или класс объектов.

Тип данных PyArrowТип поля

bool

Short

int8

Short

int16

Short

int32

Long

int64

Double

uint8

Short

uint16

Long

uint32

Double

uint64

Double

float32

Float

float64

Double

string

Text

utf8

Text

date32

Date

date64

Date

esri.oid (int64)

Object ID

esri.geometry (binary)

Geometry

Все типы данных Arrow, не перечисленные выше, не будут преобразованы и будут удалены.

Примечание:

Чтобы использовать таблицу Arrow как входную для инструмента геообработки, которому требуется класс объектов или слой объектов, таблица Arrow должна содержать геометрию. Используйте свойство schema таблицы Arrow, чтобы определить наличие поля esri.geometry.