spark-sql导入数据遇到的问题

spark-sql 客户端通过load data local inpath '/xx/xx' into table xx;方式导入,数据来源是oracle导出的csv文件

数据导入后遇到下面的问题

1,字符串带有双引号问题  通过sed命令直接替删除字段完成;

2 , 时间类型格式不正确,导出时没有设定时间格式,如果导出时yyyy/MM/dd HH:mm:ss,二spark支持的是yyyy-MM-dd HH:mm:ss格式,那么导入时时间类型导入为空,可以通过sed命令将“/” 替换为‘-’;sed -i 's#/#-#g' 文件名 将“/”替换成“-”

3,同样是空,导入后不同类型显示效果不同,导入文件格式时是逗号是分割符号为例,逗号数量和字段数量相同才成立。

如果,字符串类型导入是空字符串'' ,判断类型为name=‘’

数字类型和时间类型是null 判断条件为 age is null

例如 创建表
create table test_str(
name string,
age int,
price decimal,
time_date date,
time_date01 time stamp,
name01 string
) row format delimited fields terminated by ',' stored as textfile;

创建文件
zhangsss,23,,,
,,,,
zhanaaaa,23,23.2,,
ahangbbb,23,23.4,2018-01-01,
bbbbbbbb,23,23.4,2019-01-01,2019-01-01 12:12:12

通过laod 方式加载到表 test_str中
字段name为空相当插入字符串''

如果逗号数量少一个,最后一个字段不管是什么类型都是null;

sed命令简单使用

sed 命令删除第一行

sed -i '1d'  filename

sed 删除行指定字符的字符串

sed -i 's/zhan/li/g' filename  将zhan替换为li

sed -i 's/zhan//g' filename  将zhan删除

sed替换特殊字符/

sed -i 's#/##g' 文件名

sed -i 's#/#-#g' 文件名 将“/”替换成“-”

sed  批量替换

sed  -i 's/zhan/li/g'  -rl   /目录下面/*.txt

或sed  -i 's/zhan/li/g'  -rl   /目录下面/

-i选项是直接在文件中替换,不在终端输出;

-r选项是所给的path中的目录递归查找;

-l选项是输出所有匹配到oldstring的文件;

sed命令详细教程可以看下面的博客

https://www.cnblogs.com/ginvip/p/6376049.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值