我有一个具有以下结构的数据框式数据集,在磁盘上存储为大量 csv 文件:
[ target_col | timestamp_col | feature_1 | feature_2 | ... | feature_10000 ]
int32 int64 float64 float64 float64
我想将此数据加载到一个 dask 数据框中,并将其拆分为 ' X_train, X_test, y_train, y_test
' 样式分区,其中在列上完成训练/测试拆分timestamp
,并且X
数据框由除target_col
. 自然,y
数据框仅包含target_col
.
我还想将这些数据加载到 LightGBM 数据集中(尽管这是一个选项)。
这是我到目前为止所拥有的:
with Client() as client:
files = glob.glob(os.path.join(LOCAL_PATH, 'data/*'))
data = dd.read_csv(files[0:], dtype=col_dtypes)
train = data.loc[data.timestamp_col < 1591010111]
test = data.loc[data.timestamp_col > 1591010111]
train = train.persist()
x_cols = [c for c in train.columns if c not in ['target_col', 'timestamp_col']]
X_train = train[x_cols]
y_train = train['target_col']
X_test = test[x_cols]
y_test = test['target_col']
print('Loading data into lightgbm.datasets...')
train = lightgbm.Dataset(X_train.compute(), label=y_train.compute())
test = lightgbm.Dataset(X_test.compute(), label=y_test.compute())
但是,这具有非常高的峰值内存使用量(远远大于数据集的总大小),我认为我在这里使用 Dask 并没有最大限度地提高效率。有没有更好的方法来做到这一点,“导致较低的峰值内存使用率”更好?