本文为您介绍如何使用DataWorks的PyODPS类型节点,借助开源结巴中文分词包实现对中文字段的分词并写入新的表。

前提条件

背景信息

PyODPS为Maxcompute的Python SDK。您可以在DataWorks的PyODPS节点上直接编辑Python代码并使用Maxcompute的Python SDK。关于PyODPS节点的详情请参见PyODPS

操作步骤

  1. 进入数据开发页面。
    1. 登录DataWorks控制台
    2. 在左侧导航栏,单击工作空间列表
    3. 单击相应工作空间后的进入数据开发
  2. 创建业务流程。
    1. 右键单击业务流程,选择新建业务流程
    2. 新建业务流程页面输入业务名称后,单击新建**
  3. 上传jieba-master.zip包。
    1. 右键单击业务流程,选择新建 > MaxCompute > 资源 > Archive
    2. 新建资源页面,单击点击上传
    3. 新建资源页面输入资源名称
    4. 单击点击上传上传您已下载到本地的jieba-master.zip,选中上传为ODPS资源,单击确定新建资源
    5. 单击提交图标提交资源。上传资源
  4. 创建测试数据表。
    1. 右键单击业务流程,选择新建 > MaxCompute >
    2. 新建表页面,选择引擎类型并输入表名
    3. 在表的编辑页面,单击DDL模式
    4. DDL模式对话框,输入如下建表语句,单击生成表结构
      本教程准备了两列测试数据,您在后续开发过程中可以选择一列进行分词。
      CREATE TABLE jieba_test (
          chinese string,
          content string
      );
    5. 单击提交到生产环境
  5. 创建测试结果存放表。
    本例仅对测试数据的chinese列做分词处理,因此结果表仅有一列,创建方法同上。DDL语句如下所示。
    CREATE TABLE jieba_result (
        chinese string
    ) ;
  6. 上传测试数据。
    1. 数据开发页面,单击导入图标。
    2. 数据导入向导对话框,至少输入3个字母来搜索需要导入数据的表,单击下一步
    3. 择数据导入方式上传本地数据,单击选择文件后的浏览...。选择本地数据文件(即下载好的分词测试数据),配置导入信息。
      导入
      参数 描述
      选择数据导入方式 默认上传本地文件
      选择文件 单击浏览...,选择本地需要上传的文件。
      选择分隔符 包括逗号Tab分号空格|#&等分隔符,此处选择逗号
      原始字符集 包括GBKUTF-8CP936ISO-8859。此处选择GBK
      导入起始行 选择导入的起始行,此处选择1
      首行为标题 根据自身需求,设置首行是否为标题。本示例选中首行为标题
      数据预览 您可以在此处进行数据预览。
      说明 如果数据量过大,仅展示前100行和前50列的数据。
    4. 单击下一步
    5. 选择目标表字段与源字段的匹配方式。此处选中按名称匹配
    6. 单击导入数据
  7. 创建PyODPS节点。
    1. 右键单击业务流程,选择新建 > MaxCompute > PyODPS 2
    2. 新建节点对话框中输入节点名称,并单击提交
    3. 在PyODPS 2节点编辑界面输入如下代码。
      def test(input_var):
          import jieba
          import sys
          reload(sys)
          sys.setdefaultencoding('utf-8')
          result=jieba.cut(input_var, cut_all=False)
          return "/ ".join(result)
      hints = {
          'odps.isolation.session.enable': True
      }
      libraries =['jieba-master.zip']  #引用jieba-master.zip压缩包。
      iris = o.get_table('jieba_test').to_df()  #引用jieba_test表中的数据。
      example = iris.chinese.map(test).execute(hints=hints, libraries=libraries)
      print(example)  #查看分词结果,分词结构为MAP类型数据。
      abci=list(example)   #将分词结果转为list类型数据。
      i = 0
      for i in range(i,len(abci)):
          pq=str(abci[i])
          o.write_table('jieba_result',[pq])  #通过循环,将数据逐条写入结果表jieba_result中。
          i+=1
      else:
          print("done")
    4. 您可以在运行日志查看运行结果。运行
  8. 查看结果表。
    1. 右键单击业务流程,选择新建 > MaxCompute > ODPS SQL
    2. 新建节点对话框中输入节点名称,并单击提交
    3. 在ODPS SQL节点编辑页面输入如下语句。
      select * from jieba_result;
    4. 单击**图标运行代码。
    5. 您可以在运行日志查看运行结果。
    6. 单击查看运行结果,验证数据是否已写入结果表中。