更新时间:2024-05-27 GMT+08:00
分享

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表,则:
    1. 转化的列是: key_map表中的Key和KV表中的Key的交集。
    2. 转化后key列类型和key_map表中一致。如果key_map表无类型,则转化后key列类型为DOUBLE。
  • 如果没有key_map表,
    1. 转化的列是: key_map表kv_col_name中的key。
    2. 转化的列只支持数值类型,默认为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

  

运行示例

相关文档