13214 atcode00as6attrnameMaterialattrnameMaterialattrname_itMaterial_itattrname_frMaterial_frattrname_esMaterial_esattrname_deMaterial_deattrname_ptMaterial_ptatvalnamePlasticattrvalname_itPlastic_itattrvalname_ptPlastic_ptattrvalnamePlasticattrvalname_dePlastic_deattrvalname_frPlastic_frsysnamecatedisattrvalcid019026002002attrvalMaterial-Plasticisbrand0sortval1-null 13215 atcode00e9aattrnameStyle attrnameStyle attrname_itStyle _itattrname_frStyle _frattrname_esStyle _esattrname_deStyle _deattrname_ptStyle _ptatvalnameOtherattrvalname_itOther_itattrvalname_ptOther_ptattrvalnameOtherattrvalname_deOther_deattrvalname_frOther_frsysnamecatedisattrvalcid019026002002attrvalStyle -Otherisbrand0sortval0-null
注意上面的数据中,13215这行数据,是一条数据,但是写到HDFS上时,就变成了多行,既然是换行了,那么解决办法很简单就是把原数据中的\n(人眼不可见),给使用正则表达式替换为空字符串即可,然后散仙把原始数据给去除\n字符了,继续运行,发现这条数据仍然是错误显示的,后经查找发现在,如果数据里,存在\r字符也会影响数据的换行,下面看见\r和\n的区别:
换行符‘\n’和回车符‘\r’
顾名思义,换行符就是另起一行,回车符就是回到一行的开头,所以我们平时编写文件的回车符应该确切来说叫做回车换行符
'\n' 10 换行(newline)
'\r' 13 回车(return)
也可以表示为'\x0a'和'\x0d'.(16进制)
在windows系统下,回车换行符号是"\r\n".但是在Linux等系统下是没有"\r"符号的。
在解析文本或其他格式的文件内容时,常常要碰到判定回车换行的地方,这个时候就要注意既要判定"\r\n"又要判定"\n"。
写程序时可能得到一行,将其进行trim掉'\r',这样能得到你所需要的string了。
知道这个问题后,散仙在原来去除\n换行的代码处,又加入了\r字符的去除,再尝试运行程序,终于恢复了正常的数据格式。 总结:像\r\n这种人眼不可见的字符,在程序写入文件时,最后能够判断去除一下,以免发