将大量数据帧写入磁盘(使用dask和featuretools生成200万个特征)

时间:2019-02-27 15:14:59

标签: python dask dask-distributed featuretools feature-engineering

我对Dask和Featuretools都很陌生,因此在组合它们以并行化特征工程方面遇到很多困难

短版:解决迫在眉睫的问题 我有一个dfs的{​​{1}}包,想将它们输出为csv,每个文件都以分区作为标识符。 to_textfiles()引发了一个错误,我似乎找不到找到使用分区号pandas DataFrame的方法。有办法吗?

dfs.map(pd.to_csv, "[partition_num].csv")

长版:对于那些想知道为什么我有一大堆熊猫数据框的人,我将整个问题放在这里,以寻求更好的方法。我正在尝试使用功能工具为22k行的数据集生成200万个功能(供以后选择功能)。我正在尝试遵循参考文献(this postthis notebook)。在笔记本中,数据集巨大(4,500万行),并且比我的22,000行数据集要大得多。

尽管如此,我还是将我的数据分成了741行,因为将完整数据的>>> dfs dask.bag<map-par..., npartitions=2> >>> type(dfs.compute()[0]) pandas.core.frame.DataFrame >>> dfs.to_textfiles('feature_matrices/calculate_matrix/*_test') anaconda3/envs/featuretools/lib/python3.6/site-packages/dask/utils.py in ensure_unicode() 592 return s.decode() 593 msg = "Object %s is neither a bytes object nor has an encode method" --> 594 raise TypeError(msg % s) TypeError: ('Long error message', 'Object Age ArrivalMethod\nPAT_ENC_CSN_ID \n3223775624 33 Car\n3223776450 82 Medical Flight\n3223776487 65 Other\n3223776543 31 Ambulance\n3223835687 89 Ambulance\n3223838474 42 Public Transportation\n3223842283 11 Ambulance\n3223845045 60 A 传递到calculate_feature_matrix的顺序组件耗时太长(可能无法分发{{1} })。即使我只对整个数据集生成一个要素,也会发生这种情况。运行entity set 20分钟后,我的entity setLSFCluster)都没有超过5%的CPU利用率,并且导致大量错误跟踪:

使用具有一个功能的整个数据集:

dask-workers

除了分割数据集外,我还按要素进行分割,一次只做一个要素。我现在想将功能写入磁盘,但要将它们组合成1k块,而不是输出200万个csv文件。到目前为止,以下是我的方法,最后以dfs为calculate_matrix

... File "/path/anaconda3/envs/featuretools/lib/python3.6/site-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/path/anaconda3/envs/featuretools/lib/python3.6/site-packages/tornado/netutil.py", line 249, in accept_handler File "/path/anaconda3/envs/featuretools/lib/python3.6/socket.py", line 205, in accept OSError: [Errno 24] Too many open files Exception in callback BaseAsyncIOLoop._handle_events(110, 1) handle: <Handle BaseAsyncIOLoop._handle_events(110, 1)> Traceback (most recent call last): File "/path/anaconda3/envs/featuretools/lib/python3.6/asyncio/events.py", line 145, in _run self._callback(*self._args) File "/lab/corradin_data/FOR_AN/anaconda3/envs/featuretools/lib/python3.6/site-packages/tornado/platform/asyncio.py", line 122, in _handle_events handler_func(fileobj, events) File "/path/anaconda3/envs/featuretools/lib/python3.6/site-packages/tornado/stack_context.py", line 300, in null_wrapper return fn(*args, **kwargs) File "/path/anaconda3/envs/featuretools/lib/python3.6/site-packages/tornado/netutil.py", line 249, in accept_handler File "path/anaconda3/envs/featuretools/lib/python3.6/socket.py", line 205, in accept OSError: [Errno 24] Too many open files

对于741行的每个分区,一次计算一个功能

dask bag

这是我的第一个SO问题,因此,请让我知道要解决/添加的内容,以使我的问题更清楚。谢谢!

0 个答案:

没有答案