KV to Table是一种用于将键值对(KV)格式的数据转换回普通表格式的算法。该算法将Key作为表的列名,并将对应的Value填充到相应行的列中,从而恢复数据的表格结构,方便进一步的数据分析和处理。
算法说明
KV表格式定义:Key是列名的index,Value支持BIGINT和DOUBLE类型。在该组件中可以输入用户定义的key_map表,是列名和Key的映射,但无论是否输入key_map表,该组件都会输出key_map表记录转化后的列名和Key的映射。例如1:10,2:20和3:30。
key_map表格式定义:包含列名和index的映射以及类型信息的col_name,col_index和col_datatype,这三列类型要求是STRING,当col_datatype缺失时,默认值为double类型。
col_name | col_index | col_datatype |
col_name | col_index | col_datatype |
col1 | 1 | bigint |
col2 | 2 | double |
配置组件
方式一:可视化方式
在Designer工作流页面添加KV to Table组件,并在界面右侧配置相关参数:
参数类型 | 参数 | 描述 |
参数类型 | 参数 | 描述 |
字段设置 | KV列名 | KV列名。 |
附加列名 | 附加列名。 | |
key和value之间分隔符 | Key和Value之间分隔符。默认”:”。 | |
kv对之间分隔符 | KV对之间分隔符。默认”,” | |
参数设置 | 是否只截取前1200列 | 如果转化后列数超过表最大列数1200列后,是否只截取前1200列。 |
执行调优 | 计算核心数 | 系统根据输入数据量,自动分配训练的实例数量。 |
每个核内存大小 | 系统根据输入数据量,自动分配内存。单位为MB。 |
方式二:PAI命令方式
使用PAI命令配置KV to Table组件参数。您可以使用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 | 否 | 所有分区 | 输入表中,参与训练的分区。支持以下格式:
如果指定多个分区,则使用英文逗号(,)分隔。 |
kvDelimiter | 否 | 默认”:” | Key和Value之间分隔符。 |
itemDelimiter | 否 | 默认”,” | KV对之间分隔符。 |
top1200 | 否 | true | 是否只截取前1200列:
|
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表中的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值相加。
- 本页导读 (1)
- 算法说明
- 配置组件
- 方式一:可视化方式
- 方式二:PAI命令方式
- 示例
- 算法规模
- 常见问题