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