本文为您介绍PAI-Studio提供的三元组转kv算法组件。

三元组转kv算法组件用于将三元组表(row,col,value)转换为kv表(row,[col_id:value])

三元组(row,col,value)表的数据类型为“XXD”或“XXL”,“X”表示任意数据类型,“D”表示DOUBLE数据类型,“L”表示BIGINT数据类型。转换为kv表后,row和value的数据类型与原始输入数据类型一致,col_id是BIGINT数据类型,并输出col的索引表映射到col_id。

转换示例如下。
  • 三元组表如下。
    id word count
    01 a 10
    01 b 20
    01 c 30
  • 输出kv表如下。
    id key_value
    01 1:10;2:20;3:30
    说明 key_value中key和value、kv对之间的分隔符可自定义。
  • 输出索引表如下。
    key key_id
    a 1
    b 2
    c 3

PAI-Studio支持通过可视化或PAI命令方式,配置三元组转kv算法组件相关参数。

配置组件

  • 可视化方式
    页签 参数 描述
    字段设置 转成kv表时保持不变的列名 指定转换为kv表时,保持不变的列名称。
    输出kv中的key kv表中的key。
    输出kv中的value kv表中key的值。
    输入索引表key的列名 索引表中key的列名。
    输入索引表key索引号的列名 索引表中索引号的列名。
    key和value之间分隔符 kv表中key和value之间的分隔符。默认值为冒号(:)。
    kv对之间分隔符 kv对之间的分隔符。默认值为英文逗号(,)。
    执行调优 指定实例总数 指定Instance总数。取值范围为正整数。系统默认会根据输入数据量大小计算。
    指定内存(单位MB) 指定内存总数。取值范围为正整数。系统默认会根据输入数据量大小计算。
  • PAI命令方式
    PAI -name triple_to_kv
        -project algo_public
        -DinputTableName=test_data
        -DoutputTableName=test_kv_out
        -DindexOutputTableName=test_index_out
        -DidColName=id
        -DkeyColName=word
        -DvalueColName=count
        -DinputTablePartitions=ds=test1
        -DindexInputTableName=test_index_input
        -DindexInputKeyColName=word
        -DindexInputKeyIdColName=word_id
        -DkvDelimiter=:
        -DpairDelimiter=;
        -Dlifecycle=3
    参数名称 是否必选 描述 默认值
    inputTableName 输入表的名称。
    idColName 指定转换为kv表时,保持不变的列名称。
    keyColName kv表中的key。
    valueColName kv表中key的值。
    outputTableName 输出kv表的名称。
    indexOutputTableName 输出索引表的名称。
    indexInputTableName 输入已有的索引表的名称。不能为空表。
    indexInputKeyColName 索引表中key的列名。配置indexInputTableName后,必须配置该参数。
    indexInputKeyIdColName 索引表中索引号的列名。配置indexInputTableName后,必须配置该参数。
    inputTablePartitions 输入表的分区名称,只能输入单个分区。
    kvDelimiter kv表中key和value之间的分隔符。 冒号(:)
    pairDelimiter kv对之间的分隔符。 英文逗号(,)
    lifecycle 输出表的生命周期。
    coreNum 指定Instance总数。取值为正整数。 系统默认会根据输入数据量大小计算
    memSizePerCore 指定内存总数。取值为正整数。 系统默认会根据输入数据量大小计算

示例

  • 输入数据
    drop table if exists triple2kv_test_input;
    create table triple2kv_test_input as
    select
      *
    from
    (
      select '01' as id, 'a' as word, 10 as count from dual
        union all
          select '01' as id, 'b' as word, 20 as count from dual
        union all
          select '01' as id, 'c' as word, 30 as count from dual
        union all
          select '02' as id, 'a' as word, 100 as count from dual
        union all
          select '02' as id, 'd' as word, 200 as count from dual
        union all
          select '02' as id, 'e' as word, 300 as count from dual
    ) tmp;
  • 运行PAI命令
    PAI -name triple_to_kv
        -project algo_public
        -DinputTableName=triple2kv_test_input
        -DoutputTableName=triple2kv_test_input_out
        -DindexOutputTableName=triple2kv_test_input_index_out
        -DidColName=id
        -DkeyColName=word
        -DvalueColName=count
        -Dlifecycle=1;
  • 运行结果
    • 输出triple2kv_test_input_out kv表
      +------------+------------+
      | id         | key_value  |
      +------------+------------+
      | 02         | 1:100;4:200;5:300 |
      | 01         | 1:10;2:20;3:30 |
      +------------+------------+
    • 输出triple2kv_test_input_index_out索引表
      +------------+------------+
      | key        | key_id     |
      +------------+------------+
      | a          | 1          |
      | b          | 2          |
      | c          | 3          |
      | d          | 4          |
      | e          | 5          |
      +------------+------------+