ArcGIS 中的 Apache Arrow

Apache Arrow 是一种在内存中跨平台、跨语言的分栏式开源数据表达,允许您在资源之间有效地传输数据。 大量的大数据工程与 Arrow 连接,其已成为跨语言和平台的读写分栏列文件格式的便捷选项。 有关详细信息,请参阅有关使用案例使用 Apache Arrow 的工程和产品Apache Arrow 文档。

Arrow 中的主要表格数据表达形式为 Arrow 表格。 PythonArrow 的界面为 PyArrow。 有关详细信息,请参阅 Apache ArrowPyArrow 库文档 外部链接

表和要素数据

您可以使用数据访问 (arcpy.da) 模块中的 TableToArrowTable 函数将表和要素类转换为 Arrow 表。

创建 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 表,而是表或要素类。

类型转换

使用 TableToArrowTable 函数将表或要素类转换为 Arrow 表时,创建的 Arrow 表列(pyarrow.ChunkedArray 对象)的数据类型由输入表或要素类的字段类型确定。

字段类型PyArrow 数据类型

短整型

int16

长整型

int32

浮点型

float

双精度

double

文本

string

日期型

date64

对象 ID

esri.oid (int64)

几何

esri.geometry (binary)

以上未列出的其他字段类型(包括栅格和 BLOB 字段)不会进行转换并将删除。

注:

在转换为 Arrow 表时,文本字段将修剪为 5,000 个字符。

使用地理处理工具将 Arrow 表转换为表或要素类时,输出表或要素类的字段类型取决于输入 Arrow 表列的数据类型。 对象 ID 字段将自动添加至输出表或要素类。

PyArrow 数据类型字段类型

int8

短整型

int16

短整型

int32

长整型

int64

双精度

float32

浮点型

float64

双精度

string

文本

utf8

文本

date32

日期型

date64

日期型

esri.oid (int64)

对象 ID

esri.geometry (binary)

几何

以上未列出的其他 Arrow 字段类型(包括时间和无符号整型数据类型)不会进行转换并将删除。

注:

要将 Arrow 表用作需要要素类或要素图层的地理处理工具的输入,Arrow 表必须包含几何。 使用 Arrow 表的 schema 属性来确定是否存在 esri.geometry 字段。