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

背景信息

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

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

组件配置

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

方式一:可视化方式

在PAI-Designer(原PAI-Studio)工作流页面配置组件参数。
页签参数描述
字段设置KV列名KV列名。
附加列名附加列名。
key和value之间分隔符Key和Value之间分隔符。默认”:”。
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输入表的表名。
kvColNameKV列名。
outputTableName输出结果表。
outputKeyMapTableName输出索引表名。
inputKeyMapTableName输入索引表名。
appendColName附加列名。
inputTablePartitions输入表中,参与训练的分区。支持以下格式:
  • Partition_name=value
  • name1=value1/name2=value2:多级格式
说明 如果指定多个分区,则使用英文逗号(,)分隔。
所有分区
kvDelimiterKey和Value之间分隔符。默认”:”
itemDelimiterKV对之间分隔符。默认”,”
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 from dual union all
            select '1:10,2:20,3:-33.3' as kv from dual
        ) 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表中的Key和KV表中的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值相加。