Apache Arrow в ArcGIS

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

Текст

string

Date

date64

Object ID

esri.oid (int64)

Geometry

esri.geometry (binary)

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

Примечание:

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

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

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

int8

Short

int16

Short

int32

Long

int64

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.