首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以块形式导入拼花文件并在DuckDB中插入

以块形式导入拼花文件并在DuckDB中插入
EN

Stack Overflow用户
提问于 2022-10-21 10:06:13
回答 2查看 222关注 0票数 0

我正在尝试将一行大小组= 10的拼图文件以块的形式加载到duckdb表中。我找不到任何文件来支持这一点。

这是我的工作,等等:参见代码

代码语言:javascript
运行
复制
import duckdb
import pandas as pd
import gc
import numpy as np

# connect to an in-memory database
con = duckdb.connect(database='database.duckdb', read_only=False)

df1 = pd.read_parquet("file1.parquet")
df2 = pd.read_parquet("file2.parquet")

# create the table "my_table" from the DataFrame "df1"
con.execute("CREATE TABLE table1 AS SELECT * FROM df1")

# create the table "my_table" from the DataFrame "df2"
con.execute("CREATE TABLE table2 AS SELECT * FROM df2")

con.close()
gc.collect()

请帮助我加载这两个表与拼花文件行组大小或块。ALso,将数据作为块加载到duckdb中。

EN

回答 2

Stack Overflow用户

发布于 2022-10-22 12:04:24

代码语言:javascript
运行
复制
df1 = pd.read_parquet("file1.parquet")

此语句将将整个拼花文件读入内存中。相反,我假设您希望以块(即一个接一个的行组或分批读取)进行读取,然后将数据帧写入DuckDB中。

这是不可能的,到目前为止,使用熊猫。您可以使用像pyarrow (或快速拼板)这样的方法来完成这一任务。下面是来自皮亚罗文档的一个示例。

iter_batches可用于从Parquet文件读取流批。这可以用于分批读取、读取某些行组甚至某些列。

代码语言:javascript
运行
复制
import pyarrow.parquet as pq
parquet_file = pq.ParquetFile('example.parquet')
for i in parquet_file.iter_batches(batch_size=10):
    print("RecordBatch")
    print(i.to_pandas())

上面的例子只是一次读取10条记录。您可以将其进一步限制为某些行组,甚至某些列,如下面所示。

代码语言:javascript
运行
复制
for i in parquet_file.iter_batches(batch_size=10, columns=['user_address'], row_groups=[0,2,3]):

希望这能有所帮助!

票数 1
EN

Stack Overflow用户

发布于 2022-10-24 16:37:17

这不一定是一个解决方案(我喜欢已经提交的面向py箭头的解决方案!),但是下面是一些可能帮助您的其他信息。我正试图猜测你的根本原因是什么!(https://xyproblem.info/)

在DuckDB的下一个版本中(以及在当前的主分支上),数据将以流式方式写入磁盘以供插入。这应该允许您在不耗尽内存的情况下将任何大小的Parquet文件插入到文件支持的持久DuckDB中。希望它完全消除了您进行批处理的需要(因为DuckDB将根据您的行组自动批处理)!例如:

代码语言:javascript
运行
复制
con.execute("CREATE TABLE table1 AS SELECT * FROM 'file1.parquet'")

另一个注意事项是,通常建议的行组大小接近100,000或1,000,000行。这与非常小的行组相比有一些好处。压缩将更好地工作,因为压缩只在行组内运行。存储统计信息的开销也会减少,因为每个行组都存储自己的统计信息。而且,由于DuckDB相当快,它将非常快地处理一个100,000,000行行组(而读取统计数据的开销可能会在非常小的行组中减慢)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74152013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档