您可以使用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_name,col_index和col_datatype,这三列类型要求是STRING,当col_datatype缺失时,默认值为double类型。
col_name |
col_index |
col_datatype |
col1 |
1 |
bigint |
col2 |
2 |
double |
组件配置
您可以使用以下任意一种方式,配置KV2Table组件参数。
方式一:可视化方式
在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 |
是 |
输入表的表名。 |
无 |
kvColName |
是 |
KV列名。 |
无 |
outputTableName |
是 |
输出结果表。 |
无 |
outputKeyMapTableName |
是 |
输出索引表名。 |
无 |
inputKeyMapTableName |
否 |
输入索引表名。 |
无 |
appendColName |
否 |
附加列名。 |
无 |
inputTablePartitions |
否 |
输入表中,参与训练的分区。支持以下格式:
说明 如果指定多个分区,则使用英文逗号(,)分隔。 |
所有分区 |
kvDelimiter |
否 |
Key和Value之间分隔符。 |
默认”:” |
itemDelimiter |
否 |
KV对之间分隔符。 |
默认”,” |
top1200 |
否 |
是否只截取前1200列:
|
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值相加。
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/162521.html