我读过约有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的内核。
这里发生了什么?
事实上,如果你阅读文档的apply
,你会看到meta=
是一个参数,你可以传递,它告诉DASK如何估计该操作的输出看。这是必要的,因为apply
可以做的很一般的事情。
如果你不提供meta=
,在你的情况下,比DASK将尝试用含1对任何数值列和“富”的文字的人的例子小型非数据帧种子操作,正好看到输出将是什么样的。由于您apply
打印(和实际上并不返回任何东西),您看到了这个种子。
正如文件建议,你永远是最好尽可能提供meta=
,然后可避免在此过程中一个整体的一步。