您可以使用KV2Table轉化KV(Key:Value)格式的表為普通表格式。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 |
col1 | 1 | bigint |
col2 | 2 | double |
組件配置
您可以使用以下任意一種方式,配置KV2Table組件參數。
方式一:可視化方式
在Designer工作流頁面配置組件參數。
頁簽 | 參數 | 描述 |
字段設置 | 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 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值相加。