为什么DASK填写“foo”和1我的数据帧

问题描述 投票:1回答:1

我读过约有15 CSV文件:

df = dd.read_csv("gs://project/*.csv", blocksize=25e6,
                 storage_options={'token': fs.session.credentials})

然后,我坚持数据帧(它使用7.33 GB内存):

df = df.persist()

我设置一个新的指数,因为我希望我的团队通过对字段设置为尽可能高效:

df = df.set_index('column_a').persist()

现在我有181个师和180个分区。要尝试的速度有多快我组通过要去我尝试了自定义的应用功能,只是打印组数据帧:

grouped_by_index = df.groupby('column_a').apply(lambda n: print(n)).compute()

该印刷数据帧以正确的列,但该值不是“1”,“富”或“真”。例:

column_b  column_c column_d  column_e  column_f  column_g  \
index                                                                   
a          foo           1      foo        1           1           1

我也得到警告:

/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:1:UserWarning:meta没有被指定,从部分数据推断。如果结果是出乎意料的,请提供meta。之前:。适用(FUNC)后:。适用(FUNC,间= { 'X': 'F8', 'Y': 'F8'}),用于数据帧的结果或:。适用(FUNC,间=( 'x' 的, 'F8')) 为的一系列结果“”“切入点用于启动IPython的内核。

这里发生了什么?

dataframe dask dask-distributed
1个回答
1
投票

事实上,如果你阅读文档的apply,你会看到meta=是一个参数,你可以传递,它告诉DASK如何估计该操作的输出看。这是必要的,因为apply可以做的很一般的事情。

如果你不提供meta=,在你的情况下,比DASK将尝试用含1对任何数值列和“富”的文字的人的例子小型非数据帧种子操作,正好看到输出将是什么样的。由于您apply打印(和实际上并不返回任何东西),您看到了这个种子。

正如文件建议,你永远是最好尽可能提供meta=,然后可避免在此过程中一个整体的一步。

© www.soinside.com 2019 - 2024. All rights reserved.