我通过互联网搜索了这个,但找不到任何代码。我想到的是首先将数据加载到 Pandas(Ram)中,然后将其加载到 Cudf(GPU 的 ram)中。
import cudf
from sqlalchemy import create_engine
db_url = "postgresql://username:password@localhost:5432/database_name"
engine = create_engine(db_url)
query = "SELECT * FROM your_table_name"
pandas_df = pd.read_sql(query, engine)
cudf_df = cudf.DataFrame.from_pandas(pandas_df)
print(cudf_df)
然而,在 WSL2 环境中使用这种方法,加载数据需要更长的时间,并且在操作之后我们仍然在 ram(pandas Dataframe)中保留了加载的数据,我们需要将其删除。
有没有更有效的方法来实现这一点?
谢谢你的提问。 cuDF 无法将事务从外部 SQL 数据库直接获取到 GPU。您使用
pandas.read_sql
的解决方案是一个合理的选择。
如果您能够将数据库导出到 Parquet 文件,则可以使用 cudf 的 GPU 加速的 Parquet 读取器来非常快速地加载数据。这可能会带来近乎最佳的性能。另请注意 GPUDirect Storage 等可提高受支持 GPU 性能的功能:
您还可以使用 dask-sql (https://dask-sql.readthedocs.io/en/latest/) 直接在 GPU 上运行 SQL 查询。 dask-sql 支持 cuDF 进行 GPU 加速。您可以通过其他方式加载数据(例如通过
pandas.read_sql
或 cudf.read_parquet
),然后使用 dask-sql 对内存中的 cudf DataFrame 执行查询。