Я пытаюсь добиться поэтапной записи файлов геопаркета.
В то время как запись файла паркета по частям с помощью pyarrow.RecordBatch тривиальна для фрагментов pandas и также хорошо документирована, делая то же самое, когда создание файла геопаркета с помощью geopandas (или любого другого подхода), похоже, не имеет документации.
На данный момент я сделал следующее:
import sys
import pathlib
import pyarrow as pa
import pyarrow.parquet as pq
import pandas as pd
import numpy as np
import geopandas as gpd
def create_sample_data(filename: str):
df = pd.DataFrame(np.random.randint(-90, 90, size=(1000000, 3)), columns=list('xyz'))
df.to_csv(filename, sep=' ', header=False, index=False)
def convert_geoparquet(input_file, output_file):
df = pd.read_csv(input_file, header=None, names=['x', 'y', 'z'], sep=' ', dtype='int32')
gdf = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df.x, df.y), crs=4326)
gdf.to_parquet(output_file, compression='brotli')
def convert_parquet(input_file, output_file):
new_schema = pa.schema([('x', pa.int32()), ('y', pa.int32()), ('z', pa.int32())])
with pq.ParquetWriter(output_file, schema=new_schema, compression='brotli') as writer:
with pd.read_csv(input_file, header=None, names=['x', 'y', 'z'], sep=' ', dtype='int32', chunksize=1000) as reader:
for i, df in enumerate(reader):
batch = pa.RecordBatch.from_pandas(df, schema=new_schema)
writer.write_batch(batch)
def convert(input_file, conv_type='parquet'):
output_file = f"""{pathlib.Path(input_file).with_suffix('')}.{conv_type}"""
if conv_type == 'parquet':
convert_parquet(input_file, output_file)
elif conv_type == 'geoparquet':
convert_geoparquet(input_file, output_file)
else:
sys.exit(1)
if __name__ == '__main__':
input_file = './testdata.csv'
create_sample_data(input_file)
convert(input_file, 'parquet')
convert(input_file, 'geoparquet')
Я использую Python 3.11, pyarrow 18.1.0, geopandas 1.0.1 и pandas 2.2.3.
И файлы геопаркета, и файлы паркета получают создается легко, однако создание геопаркета, очевидно, происходит намного медленнее, поскольку он читает весь файл, а не выполняет его по частям (помимо других последствий, которые это приносит). Кажется, существует несколько «стандартов» написания геопаркетов, но геопанды кажутся мне наиболее интуитивно понятными.
TLDR: Есть ли способ реализовать фрагментарный геопаркет создание больших наборов табличных данных?
Заранее спасибо и большое спасибо
Я пытаюсь добиться поэтапной записи файлов геопаркета. В то время как запись файла паркета по частям с помощью pyarrow.RecordBatch тривиальна для фрагментов pandas и также хорошо документирована, делая то же самое, когда создание файла геопаркета с помощью geopandas (или любого другого подхода), похоже, не имеет документации. На данный момент я сделал следующее: [code]import sys import pathlib import pyarrow as pa import pyarrow.parquet as pq import pandas as pd import numpy as np import geopandas as gpd
[/code] Я использую Python 3.11, pyarrow 18.1.0, geopandas 1.0.1 и pandas 2.2.3. И файлы геопаркета, и файлы паркета получают создается легко, однако создание геопаркета, очевидно, происходит намного медленнее, поскольку он читает весь файл, а не выполняет его по частям (помимо других последствий, которые это приносит). Кажется, существует несколько «стандартов» написания геопаркетов, но геопанды кажутся мне наиболее интуитивно понятными. TLDR: [b]Есть ли способ реализовать фрагментарный геопаркет создание больших наборов табличных данных?[/b] Заранее спасибо и большое спасибо