您可以使用KV2Table转化KV(Key:Value)格式的表为普通表格式。Key转换成表的某列名,Value转成该列在对应行的值。

背景信息

KV表格式定义:Key是列名的index,Value支持BIGINTDOUBLE类型。在该组件中可以输入用户定义的key_map表,是列名和Key的映射,但无论是否输入key_map表,该组件都会输出key_map表记录转化后的列名和Key的映射。例如1:10,2:203:30。

key_map表格式定义:包含列名和index的映射以及类型信息的col_namecol_indexcol_datatype,这三列类型要求是STRING,当col_datatype缺失时,默认值为double类型。

col_name

col_index

col_datatype

col1

1

bigint

col2

2

double

组件配置

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

方式一:可视化方式

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

页签

参数

描述

字段设置

KV列名

KV列名。

附加列名

附加列名。

keyvalue之间分隔符

KeyValue之间分隔符。默认”:”。

kv对之间分隔符

KV对之间分隔符。默认”,”

参数设置

是否只截取前1200

如果转化后列数超过表最大列数1200列后,是否只截取前1200列。

执行调优

计算核心数

系统根据输入数据量,自动分配训练的实例数量。

每个核内存大小

系统根据输入数据量,自动分配内存。单位为MB。

方式二:PAI命令方式

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

PAI -name KVToTable
    -project algo_public
    -DinputTableName=test
    -DoutputTableName=test_out
    -DoutputKeyMapTableName=test_keymap_out
    -DkvColName=kv;

参数名称

是否必选

参数描述

默认值

inputTableName

输入表的表名。

kvColName

KV列名。

outputTableName

输出结果表。

outputKeyMapTableName

输出索引表名。

inputKeyMapTableName

输入索引表名。

appendColName

附加列名。

inputTablePartitions

输入表中,参与训练的分区。支持以下格式:

  • Partition_name=value

  • name1=value1/name2=value2:多级格式

说明

如果指定多个分区,则使用英文逗号(,)分隔。

所有分区

kvDelimiter

KeyValue之间分隔符。

默认”:”

itemDelimiter

KV对之间分隔符。

默认”,”

top1200

是否只截取前1200列:

  • true

  • false

true

lifecycle

输出表的生命周期,取值范围为[1, 3650]。

coreNum

计算的核心数目,取值为正整数。

系统自动分配

memSizePerCore

每个核心的内存(单位是兆),取值范围为(100,64*1024)

系统自动分配

示例

  • 数据生成

    drop table if exists test;
    create table test as
    select * from
        (
            select '1:1,2:2,3:-3.3' as kv union all
            select '1:10,2:20,3:-33.3' as kv
        ) tmp;
  • PAI命令行

     PAI -name KVToTable
        -project algo_public
        -DinputTableName=test
        -DoutputTableName=test_out
        -DoutputKeyMapTableName=test_keymap_out
        -DkvColName=kv;
  • 输出说明

    • 输出表

      +------------+------------+------------+
      | kv_1       | kv_2       | kv_3       |
      +------------+------------+------------+
      | 1.0        | 2.0        | -3.3       |
      | 10.0       | 20.0       | -33.3      |
      +------------+------------+------------+
    • 输出映射表

      +------------+------------+------------+
      | col_name   | col_index  | col_type   |
      +------------+------------+------------+
      | kv_1       | 1          | double     |
      | kv_2       | 2          | double     |
      | kv_3       | 3          | double     |
      +------------+------------+------------+

算法规模

转化后的列包含Append列和KV转化的列,先输出KV列再输出Append列。当总列数超过最大列数限制,且输出top1200选项为True时,则输出最大列数,否则报错,目前输出表的最大列数为1200列。

数据量不超过1亿条记录。

常见问题

  • Q:如果有输入key_map表,则转化的列内容是什么?

    A:转化的列是key_map表中的KeyKV表中的Key的交集。

  • Q:如果有输入key_map表,则转化后的Key列类型是什么?

    A:转化后key列类型和key_map表中一致。如果key_map表无类型,则转化后key列类型为DOUBLE。

  • Q:如果有输入key_map表,则转化后key列名称的命名规则是什么?

    A:命名规则为kv列的列名+“”+key

    不支持以下字符:

    %&()*+-./;<>=?

  • Q:列名冲突原因是什么?

    A:如果指定了Append列,且Append列名和转化后Key列名相同,则会报错。

  • Q:转化的列支持什么类型?

    A:只支持数值类型。

  • Q:列名长度超过128个字符时怎么办?

    A:列名会被截断成128个字符。

  • Q:同一行有重复Key时,如何处理?

    A:需要将Value值相加。