hive 导出json格式 文件_hive用json数据建表,同时spark再保存为csv文件

本文介绍如何使用Hive读取JSON格式文件并建表,通过Python将数据转换为DataFrame,然后利用Hive加载数据。接着,讨论了在Spark中遇到的序列化问题及其解决方法,最后展示如何使用Spark将数据保存为CSV格式。
摘要由CSDN通过智能技术生成

有一份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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值