[英]How to read a large file as Pandas dataframe?
我想讀取一個大文件(4GB)作為 Pandas dataframe。 Since using Dask directly still consumes maximum CPU, I read the file as a pandas dataframe, then use dask_cudf
, and then convert back to a pandas dataframe.
但是,我的代碼仍在 Kaggle 上使用最大 CPU。 GPU 加速器已打開。
import pandas as pd
from dask import dataframe as dd
from dask_cuda import LocalCUDACluster
from dask.distributed import Client
cluster = LocalCUDACluster()
client = Client(cluster)
df = pd.read_csv("../input/subtype-nt/meth_subtype_normal_tumor.csv", sep="\t", index_col=0)
ddf = dask_cudf.from_cudf(df, npartitions=2)
meth_sub_nt = ddf.infer_objects()
我有類似的問題。 通過一些研究,我開始了解Vaex 。
本質上,這是您可以嘗試做的事情:
使用 Vaex 讀取csv
文件並將其轉換為hdf5
文件(針對 Vaex 最優化的文件格式)
vaex_df = vaex.from_csv('../input/subtype-nt/meth_subtype_normal_tumor.csv', convert=True, chunk_size=5_000)
使用 Vaex 打開hdf5
文件。 Vaex 將進行內存映射,因此不會將數據加載到 memory 中。
vaex_df = vaex.open('../input/subtype-nt/meth_subtype_normal_tumor.csv.hdf5')
現在您可以對 Vaex dataframe 執行操作,就像對 Pandas 進行操作一樣。 它將非常快,您肯定會注意到巨大的性能提升(較低的 CPU 和 memory 使用率)。
您也可以嘗試將csv
文件直接讀入 Vaex dataframe 而不將其轉換為hdf5
。 我在某處讀到 Vaex 處理hdf5
文件的速度最快,因此我建議采用上述方法。
vaex_df = vaex.from_csv('../input/subtype-nt/meth_subtype_normal_tumor.csv.hdf5', chunk_size=5_000)
現在您的代碼建議您首先嘗試使用pandas
加載數據,然后將其轉換為dask-cuDF
dataframe。 這不是最優的(或者甚至可能不可行)。 相反,可以使用dask_cudf.read_csv
function(參見 文檔):
from dask_cudf import read_csv
ddf = read_csv('example_output/foo_dask.csv')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.