最近遇到了类似这样的问题:批量解析数据库中某张表的某一列(json串形式存储),效果如下。
为此,我编写了如下的python脚本
def main(table_source,var_name):
"""
【批量解析json串】
入参:
table_source:含义:来自数据库的库名.表名,
格式:字符串,
例如:'bestbuy_decision.streaming_target_info'
var_name:含义:需要解析的字段
格式:字符串
例如:'data'
使用范例:
data = main(table_source,var_name)
"""
sql_command = "SELECT * FROM "+ str(table_source)
data_list = connect_mysql(str(sql_command),command_type='select') #从TiDB取数
data = pd.DataFrame(data_list) #将取到的数转为DataFrame格式
data['columns'] = data[str(var_name)].map(lambda x:list(json.loads(x).keys())) #新增一列'columns'用于存储每一列的json串的字段名
add_columns_list =list(set( list(chain(*data['columns'] )))) #获取json串中的所有字段名称
for columns in add_columns_list:
data[str(columns)] = data['data'].map(lambda x:json.loads(x).get(str(columns))) #将json串展开
del data['columns'] #删除无用字段columns
return data #返回处理过后的数据
使用上述函数可以实现从图1到图2的效果。
我自己测试,100+w行的数据(字段数40左右)大概需要10分钟。