Apache Arrow 是一种在内存中跨平台、跨语言的分栏式开源数据表达,允许您在资源之间有效地传输数据。 大量的大数据工程与 Arrow 连接,其已成为跨语言和平台的读写分栏列文件格式的便捷选项。 有关详细信息,请参阅有关使用案例和使用 Apache Arrow 的工程和产品的 Apache Arrow 文档。
Arrow 中的主要表格数据表达形式为 Arrow 表格。 Python 中 Arrow 的界面为 PyArrow。 有关详细信息,请参阅 Apache Arrow 和 PyArrow 库文档 。
表和要素数据
您可以使用数据访问 (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 字段。