如何通过Python绑定将DataFusion DataFrame持久化到内存?
将DataFusion DataFrame持久化到内存的方法
DataFusion注册CSV表时默认是懒加载模式,不会主动把数据加载到内存。要实现内存持久化,可以通过以下两种常用方法:
方法一:直接创建内存表(推荐)
利用create_memory_table方法,触发查询并将结果直接存储为内存表,后续操作无需再访问原始CSV:
import datafusion ctx = datafusion.SessionContext() # 注册CSV表(懒加载,未加载数据到内存) ctx.register_csv("x", path) # 从已注册的表生成DataFrame df = ctx.table("x") # 将数据持久化到内存,注册为新表"x_in_memory" ctx.create_memory_table("x_in_memory", df) # 后续使用内存表查询,数据直接从内存读取 result = ctx.sql("SELECT COUNT(*) FROM x_in_memory") print(result.collect())
方法二:通过Pandas中转(适合需Python层处理数据的场景)
先将数据加载到Pandas DataFrame(已在内存),再注册为DataFusion内存表:
import datafusion import pandas as pd ctx = datafusion.SessionContext() ctx.register_csv("x", path) df = ctx.table("x") # 将数据加载到内存中的Pandas DataFrame pandas_df = df.to_pandas() # 注册为DataFusion内存表 ctx.register_dataframe("x_in_memory", pandas_df)
说明
create_memory_table是更高效的方式,直接在DataFusion引擎内完成内存持久化,避免Python和引擎间的数据拷贝。- 若数据量极大,需注意内存占用情况,避免内存溢出问题。
内容的提问来源于stack exchange,提问作者Powers
相关产品推荐
相关产品推荐

