本文为您介绍PyODPS如何避免将数据下载到本地。
背景信息
PyODPS提供了多种方便下载数据到本地的方法。因此,在设备允许的情况下,可以把数据下载到本地处理,然后再上传至MaxCompute。但是这种操作非常低效,数据下载到本地进行处理,无法使用MaxCompute的大规模并行能力。当数据量大于10 MB时,不建议进行本地数据处理。常见的将数据下载到本地的操作如下:
Head、Tail和To_pandas方法的调用。通常,可以调用
head、tail
方法返回少量数据进行数据探查,当数据量较大时,建议调用Persist方法,将数据直接保存在MaxCompute表中。详情请参见执行。在表或SQL实例上直接执行Open_reader方法获取表数据。当数据量大时,建议使用PyODPS DataFrame(从MaxCompute表创建)和MaxCompute SQL来处理数据,以替代本地数据处理这种比较低效的方式。
示例代码
将一份JSON串数据按Key-Value对展开成一行,示例代码如下。
本地测试,通过
head()
方法返回少量数据进行测试。In [12]: df.head(2) json 0 {"a": 1, "b": 2} 1 {"c": 4, "b": 3} In [14]: from odps.df import output In [16]: @output(['k', 'v'], ['string', 'int']) ...: def h(row): ...: import json ...: for k, v in json.loads(row.json).items(): ...: yield k, v ...: In [21]: df.apply(h, axis=1).head(4) k v 0 a 1 1 b 2 2 c 4 3 b 3
线上生产,通过
persist()
方法将结果存回MaxCompute表。In [14]: from odps.df import output In [16]: @output(['k', 'v'], ['string', 'int']) ...: def h(row): ...: import json ...: for k, v in json.loads(row.json).items(): ...: yield k, v ...: In [21]: df.apply(h, axis=1).persist('my_table')