KV表转普通表
概述
用于将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 |
说明与约束
- key_map表中数据类型暂时只支持bigint、string、double3种类型。
- 如果有输入key_map表,则:
- 转化的列是: key_map表中的Key和KV表中的Key的交集。
- 转化后key列类型和key_map表中一致。如果key_map表无类型,则转化后key列类型为DOUBLE。
- 如果没有key_map表,
- 转化的列是: key_map表kv_col_name中的key。
- 转化的列只支持数值类型,默认为double。
- 转化后key列名称的命名规则是:
- 无key_map表,使用kv_col_name+"_"+key 命名。
- 有key_map表,使用key_map对应的col_name命名。
- 不支持以下字符:%&()*+-./;<>=?
- 指定的Append列,不能与Append列名和转化后Key列名相同;会造成列名冲突原因,会报错。
- 如果输入表中列名长度超过128个字符时,列名会被截断成128个字符。
- 同一行中不能存在重复的key,否则会报错。
输入
参数 |
子参数 |
参数说明 |
---|---|---|
inputs |
dataframe |
inputs为字典类型,dataframe为pyspark中的DataFrame类型对象 |
keymap_dataframe |
keymap_dataframe为输入的keymap表,类型:pyspark中的DataFrame类型对象 |
输出
参数 |
子参数 |
参数说明 |
---|---|---|
outputs |
output_dataframe |
输出结果表 |
output_keymap_dataframe |
输出索引表 |
参数说明
参数名称 |
是否必选 |
参数描述 |
默认值 |
---|---|---|---|
input_dataframe |
是 |
输入df |
无 |
input_keymap_dataframe |
否 |
输入索引表对应的df,非必须 |
无 |
kv_col_name |
是 |
KV列名 |
无 |
append_col_names |
否 |
附加列名,支持多列 |
无 |
kv_delimiter |
否 |
Key和Value之间分隔符 |
默认”:” |
item_delimiter |
否 |
KV对之间分隔符 |
默认”,” |
top1200 |
否 |
是否只截取前1200列 true false |
true |
样例
没有kepmap表
inputs = { "dataframe": input_df, "keymap_dataframe":None} params = { "inputs": inputs, "kv_col_name": "kv", "append_col_names": "rowid", "kv_delimiter": ":", "item_delimiter": ",", "top1200": True, }
输入
rowid |
kv |
---|---|
0 |
col1:2,col2:3 |
1 |
col1:5,col2:6 |
2 |
col1:8 |
3 |
col1:11,col2:12 |
输出
col_name |
col_index |
col_type |
---|---|---|
kv_col1 |
col1 |
double |
kv_col2 |
col2 |
double |
kv_col1 |
kv_col2 |
rowid |
---|---|---|
2.0 |
3.0 |
0 |
5.0 |
6.0 |
1 |
8.0 |
2 |
|
11.0 |
12.0 |
3 |
有kepmap表
inputs = { "dataframe": input_df, "keymap_dataframe": input_key_map_df } params = { "inputs": inputs, "kv_col_name": "kv", "append_col_names": "rowid,kv_1", "kv_delimiter": ":", "item_delimiter": ",", "top1200": True, }
输入
rowid |
kv |
kv_1 |
---|---|---|
0 |
col1:2,col2:3 |
col3:2,col4:3 |
1 |
col1:5,col2:6 |
|
2 |
col1:8 |
|
3 |
col1:11,col2:12 |
col_name |
col_index |
col_type |
---|---|---|
mycol1 |
col1 |
bigint |
mycol2 |
col2 |
bigint |
输出
col_name |
col_index |
col_type |
---|---|---|
mycol1 |
col1 |
bigint |
mycol2 |
col2 |
bigint |
mycol1 |
mycol2 |
rowid |
kv_1 |
---|---|---|---|
2 |
3 |
0 |
col3:2,col4:3 |
5 |
6 |
1 |
|
8 |
2 |
||
11 |
12 |
3 |