有一份json规范的数据
样式如下
{1:10,2:20,3:30}
{2:20}
{1:10,3:30}
1.用python做一个转换
我原想用python pandas.read_json来读取,但是发现读不出来,因为以前也确实没做过json的读取应该是格式不对,需要重新清洗。
思路:既然每行是一个json对象,那么把每一行都导入到一个list里,然后再建成dataframe不就好了。
import pandas as pd
import json
data = []
with open('db.txt',encoding='utf-8') as f:
for line in f:
data.append(json.loads(line))
data_df = pd.DataFrame(data)
2.hive直接建表。
txt可以保存为hive表,那么json文件应该也可以。
create table testjson(
areaId string,
areaName string,
billingPointId string,
billingPointName string,
chargeChannel string,
cost string,
expensesMode int,
isDeleted int,
isGift int,
outPackageType int,
productCpId string,
productCpName string,
productId string,
productName string,
speakforDate string,
speakforId bigint,
speakforMode int,
speakforState int,
updateDate string,
userId bigint,
userPhoneno string)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS TEXTFILE;
实验成果。表已经读出来来了
load data local inpath 'db.txt' into table testjson;
3.spark保存为csv
但这样依然是json格式的,如果想发送给别人看,那么怎么办。
1.用脚本语言在内存里对数据进行清洗。
2.既然hive里已经有了,那么我们何不如用spark读一下,一个sava不就好了。
!但是就在这里遇到了一个问题,spark读表提示找不到json 序列化的jar包,
hive既然可以读,那说明json ser序列化的包是存在的,而spark的jar包又是直接复制hive的,那么只能说明classpath没有读取jar包,我们主动给他在配置文件里添加上,就像添加mysql的链接jar包一样。
我为了保险同时改了两个地方,也没测试到底是哪个生效,不过spark读表确实是没报错了
data.repartition(1).write.csv(path='file:/home/neo/pythonwork/pythonproject/data/aaa.csv',
header=True, sep=",", mode='overwrite')
首先重定义一下分块数,不然是按照分块保存为多个文件。
最后ok。pyspark系列--读写dataframe - 振裕 - CSDN博客blog.csdn.net