三元组转kv

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

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

三元组(row,col,value)表的数据类型为“XXD”或“XXL”,“X”表示任意数据类型,“D”表示DOUBLE数据类型,“L”表示BIGINT数据类型。转换为kv表后,rowvalue的数据类型与原始输入数据类型一致,col_idBIGINT数据类型,并输出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_valuekeyvalue、kv对之间的分隔符可自定义。

  • 输出索引表如下。

    key

    key_id

    a

    1

    b

    2

    c

    3

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

组件配置

您可以使用以下任意一种方式,配置三元组专kv组件参数。

方式一:可视化方式

Designer工作流页面配置组件参数。

页签

参数

描述

字段设置

转成kv表时保持不变的列名

指定转换为kv表时,保持不变的列名称。

输出kv中的key

kv表中的key。

输出kv中的value

kv表中key的值。

输入索引表key的列名

索引表中key的列名。

输入索引表key索引号的列名

索引表中索引号的列名。

keyvalue之间分隔符

kv表中keyvalue之间的分隔符。默认值为冒号(:)。

kv对之间分隔符

kv对之间的分隔符。默认值为英文逗号(,)。

执行调优

指定实例总数

指定Instance总数。取值范围为正整数。系统默认会根据输入数据量大小计算。

指定内存(单位MB)

指定内存总数。取值范围为正整数。系统默认会根据输入数据量大小计算。

方式二:PAI命令方式

使用PAI命令方式,配置该组件参数。您可以使用SQL脚本组件进行PAI命令调用,详情请参见SQL脚本

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表中keyvalue之间的分隔符。

冒号(:)

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
        union all
          select '01' as id, 'b' as word, 20 as count
        union all
          select '01' as id, 'c' as word, 30 as count
        union all
          select '02' as id, 'a' as word, 100 as count
        union all
          select '02' as id, 'd' as word, 200 as count
        union all
          select '02' as id, 'e' as word, 300 as count
    ) 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          |
      +------------+------------+