本文为您介绍Designer提供的三元组转kv算法组件。
三元组转kv算法组件用于将三元组表(row,col,value)转换为kv表(row,[col_id:value])。
三元组(row,col,value)表的数据类型为“XXD”或“XXL”,“X”表示任意数据类型,“D”表示DOUBLE数据类型,“L”表示BIGINT数据类型。转换为kv表后,row和value的数据类型与原始输入数据类型一致,col_id是BIGINT数据类型,并输出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_value中key和value、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索引号的列名 | 索引表中索引号的列名。 | |
key和value之间分隔符 | kv表中key和value之间的分隔符。默认值为冒号(:)。 | |
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表中key和value之间的分隔符。 | 冒号(:) |
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 | +------------+------------+