PYTHON实现HBASE数据格式的转换
原始数据格式,需要将列族转换列,detail列中jiason对象需要提出并列
转换结果如下
具体实现代码
import pandas as pd
#读取txt数据,对原始数据行进行分割,按照或分割,重命名
df=pd.read_csv("C:\\Users\\*****.txt",encoding='gbk',engine='python',sep='column=|timestamp=|value=',names=['row_key','type','timestamp','value'])
#切割后,需要合并row_key,将行变成列,设置series二级索引
df=df.set_index(["row_key","type"])["value"]
#使用unstack方法,series二级索引变成列,生成dataframe
df=df.unstack()
#可以通过 rename_axis(index=, columns=) 来给坐标轴重命名,再给索引重命名
df=df.rename_axis(columns=None).reset_index()
#重新设置列名
df.columns=['row_key','detail','cantype','condition','creattime','creatuser','imsi','reporttime','source','transactionid','vin']
#准备提取“detail”列jason对象,第一步使用eval完成obj-》str-》dict转换
df['detail']=df['detail'].map(lambda x:eval(str(x)))
#使用apply(lambda x:pd.series(x)),因为我们这里的值是一个字典, 而Series接收一个字典的话, 那么字典的key就是索引, value就是值
# 在扩展成DataFrame的时候同样会考虑到字典中所有的key, 有多少个不重复的key就会生成多少个列
# 如果该行没有对应的值则使用NaN填充
tmp=df['detail'].apply(pd.Series)
#完成dataframe合并
df[tmp.columns]=tmp
print(type(df['vin'].values))