您可以使用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值相加。