报错问题:分隔符\t识别不出来问题,本地可以分割出,但是MapReduce却报错

对于系统的默认分割符,在MapReduce中的识别与本地的显示存在转码问题。

输入给sys.stdin的是hsql中select出来结果写入hdfs的数据,如果抽取部分数据到本地测试用个下面\t分割能很好分割select出来的数据,但是一旦提交hadoop的MapReduce服务器处理就报错。

	for line in sys.stdin:
		json_dict1 = {}
		data=line.strip()
		data_list = data.split('\t') 

原因分析与解决:

上面在本地可以运行,但是线上对于hivesql中选出来的数据,默认是以\001字符串 分割的,导出来select的结果到hdfs中后以hadoop fs -text去出来的结果看不到任何分割符。某些软件中或命令中看到以^A分割的(即把hive表格导出到本地时,系统默认的分隔符是^A(以\001,\002...\025分割的,看到^A(^B)不一定第真正的字符,而是某个特殊字符,转换成二进制码之后可以看到真正字符的二进制码(比如\001,(\002)).对于这类特殊字符,直接用pycharm编辑器看或者cat或者vim是看不到的^A,看到的只是空格,(但是实际是在hives以\001处理的),所以对于在MapReducer中处理时要以 data_list = data.split('\001')来处理。(但是在导出到本地hive -e "select* ">结果文件,重定向后的结果文件,用\t分割是可以分割出的,且用\001反而分割不出!!!在hive sql(MapReducer中是要以字符串\001去分割!)

解决:data_list = data.split('\001') #线上需要用\001去分割。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值