Maxcompute数据清洗和

2019-07-10  本文已影响0人  zishen

上手dataworks

关于maxcompute

关于dataworks

PyODPS连接maxcompute:

安装调试pyodps:

from odps import ODPS
#实例化maxcompute的对象
o = ODPS(access_id='xxxxxx'
                    , access_secret='xxxxxx'
                    , project='工作空间名'
                    ,end_point='https://service.odps.aliyun.com/api')                        

jupyter-notebook利用pyodps和pyecharts统计可视化简单例子:

from odps import ODPS
from odps.df import DataFrame

o = ODPS(access_id='  ', access_secret='  ', project='  ', end_point='https://service.odps.aliyun.com/api')

t = o.get_table('data_product')
df = DataFrame(t)
deepdraw = df[df['source']=='_deepdraw']
leycloud = df[df['source']=='_leycloud']
source_agg = df.groupby(df.source).agg(count=df.count())
print(source_agg)

from pyecharts.charts import Pie
from pyecharts import options as opts
source_pie =(Pie()
             .add("产品数",[('_leycloud',15588349),('_deepdraw',1035428)])
             .set_global_opts(title_opts=opts.TitleOpts(title="source分布"))
             )
source_pie.render_notebook()
pyecharts可视化效果

Jupyter的交互增强和日志服务

对Maxcompute中的表进行操作

建表

maxcompute表的设计

数据中台表

各字段对应的英文名称

字段表格图

示例tops表代码

CREATE TABLE `wzs_tops` (
    `uuid` string COMMENT '全局唯一uuid,unique key,有索引',
    `key_word` string COMMENT '分类的关键词',
    `title` string COMMENT '标题',
    `images` string COMMENT '图片url,json字段',
    `price` bigint COMMENT '价格',
    `comments` bigint COMMENT '全局唯一uuid,unique key,有索引',
    `brand` string COMMENT '品牌品',
    `create_date` datetime,
    `source_pictures` string COMMENT '所属图片的source id,有索引',
    `product_name` string COMMENT '商品名称',
    `style` string COMMENT '风格',
    `craft` string COMMENT '工艺',
    `color_pattern` string COMMENT '色彩花纹',
    `main_fabric` string COMMENT '主面料',
    `source` string COMMENT '信息来源',

    `model` string COMMENT '版型',
    `profile` string COMMENT '廓形',
    `coat_length` string COMMENT '衣长',
    `collar_design` string COMMENT '领型',
    `sleeve_length` string COMMENT '袖长',
    `sleeve_design` string COMMENT '袖型',
    `placket_design` string COMMENT '门襟类型',
    `hem_design` string COMMENT '下摆设计'
    
) ;

对ODPS的DataFrame使用自定义函数

axis = 0的时候为对每一行调用自定义函数,默认直接传入collection的一行,函数处理返回后再传入下一行。reduce = False时返回的是sequence,否则返回的是collection,reduce为False时,也可以使用yield关键字来返回多行结果。

@output(['uuid','title','brand','create_date','source','source_picture','key_word',
         'product_name','images','price','comments','style', 'craft', 'color_pattern', 
         'main_fabric', 'model', 'profile','coat_length','collar_design', 'sleeve_length',
         'sleeve_design','placket_design', 'hem_design']
        ,['string','string','string','datetime','string','string','string','string','string'
          ,'string','string','string','string','string','string','string','string','string'
          ,'string','string','string','string','string'])
def df_clean(row):
    import json
    import pandas as pd
    import sys
    reload(sys) 
    sys.setdefaultencoding('utf-8')
df.map_reduce(mapper = df_clean)#等价于
df.apply(df_clean,axis = 0, reduce =False)

在odps上使用第三方包:

odps上只有numpy一个第三方包,如果想用pandas或其他包就得上传包和依赖包到odps资源。可以通过jupyter上pyodps的接口上传,但是在上传数据较大的包如pandas有20mb会出现timeout报错。解决办法是在dataworks上“业务流程”——“资源”——“新建Archive资源”中上传,上传时打钩“上传为ODPS资源”就可以在当前工作空间中使用资源,也可以将小型的包的源码上传为新建Python资源中就可以在odps中进行引用。也可以将需要调用的文件上传到File资源中进行调用。文档和包

在代码中调用第三方包和文件:

from odps import options

options.sql.settings = { 'odps.isolation.session.enable': True }
options.df.libraries = ['pandas.zip','pytz.zip','dateutil.zip','six.tar.gz'] #导入资源库中的pandas包和依赖
resource = o.get_resource('category.csv')
with resource.open('r') as fp:
    category = pd.read_csv(fp)     #在dataworks中运行要先通过resource打开文件,如果本地运行直接打开
上一篇下一篇

猜你喜欢

热点阅读