【发布时间】:2017-12-28 05:40:53
【问题描述】:
在 spark2.0.1 ,hadoop2.6.0 中,我有很多文件用 '!@!\r' 分隔,而不是通常的换行 \n,例如:
=========================================
2001810086 rongq 2001 810!@!
2001810087 hauaa 2001 810!@!
2001820081 hello 2001 820!@!
2001820082 jaccy 2001 820!@!
2002810081 cindy 2002 810!@!
=========================================
我尝试根据Setting textinputformat.record.delimiter in spark提取数据
set textinputformat.record.delimiter='!@!\r';或set textinputformat.record.delimiter='!@!\n';但仍然无法提取数据
在 spark-sql 中,我这样做: ===== =================================
create table ceshi(id int,name string, year string, major string)
row format delimited
fields terminated by '\t';
load data local inpath '/data.txt' overwrite into table ceshi;
select count(*) from ceshi;
结果是5,但我尝试set textinputformat.record.delimiter='!@!\r';然后select count(*) from ceshi;结果为1,分隔符不好用;
我还查看了hadoop2.6.0的源码,TextInputFormat.java中RecordReader的方法,我注意到默认的textinputformat.record.delimiter为null,然后LineReader.java使用readDefaultLine方法读取了一行终止CR、LF 或 CRLF(CR ='\r',LF ='\n')之一。
【问题讨论】:
标签: hadoop apache-spark apache-spark-sql