在spark2.0.1、hadoop2.6.0中,我有许多用“!@”分隔的文件\r'而不是通常的新行,例如:
=========================================
2001810086 rongq 2001 810!@!
2001810087 hauaa 2001 810!@!
2001820081 hello 2001 820!@!
2001820082 jaccy 2001 820!@!
2002810081 cindy 2002 810!@!
=========================================
我尝试根据spark中的textinputformat.record.delimiter设置提取数据 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')之一终止的行。
1条答案
按热度按时间brc7rcf01#
你应该使用
sparkContext
的hadoopConfiguration
api来设置textinputformat.record.delimiter
作为如果你用
sparkContext
作为你应该没事的。
更新
我注意到一个带有分隔符的文本文件
\r
保存时更改为\n
分隔符。所以,下面的格式应该适用于你,因为它为我
一
case clas
他打电话来了ceshi
作为需要它应该把dataframe作为
现在你可以打电话了
count
作为输出为