具体代码如下 else if(fields[i] == null || "null".equals(fields[i]) || "".equals(fields[i])){ System.out.println("fields[i] is null or fields[i] == null or fileds[i]==''"); out[i] = null; } |
问题经过一段时间整理,已解决,将CSVIntermediateDataFormat.java文件的206行对 "null".equals(fields[i])的情况做空值处理即可。 中间遇见的打包文件找不到等问题,同事帮忙找着了,感谢各位帮忙解决 |
SuperDove 发表于 2016-9-28 15:25 那就可能sqoop不支持了 |
tntzbzc 发表于 2016-9-28 13:15 你说的这个select if(isnull(col),0,1) as col语句是写在哪里?sqoop:000> create job -f 3 -t 2 Creating job for links with from id 3 and to id 2 Please fill following values to create new job object Name: test13 From Job configuration Input directory: /tmp/download/data.txt To database configuration Schema name: zcy Table name: users Table SQL statement: ----是写在这里吗?我写的select if(isnull(age),0,1) as col也报错 Table column names: users,name,age,sex Stage table name: Should clear stage table: Throttling resources Extractors: 1 Loaders: 1 |
SuperDove 发表于 2016-9-27 22:08 可以尝试如果为空返回0,否则返回1 select if(isnull(col),0,1) as col. |
starrycheng 发表于 2016-9-27 21:36 哎,就是因为原库中的age为int类型,并且还default null,你说气不气。 不过你这么一说我想起另一个方法,做一个中间表然后倒入转换格式看看~~ |
本帖最后由 starrycheng 于 2016-9-27 21:38 编辑 SuperDove 发表于 2016-9-27 21:17 sqoop目前还没有发现数据类型转换。 导入和导出的数据类型一致。 只能把age的数据类型,改成与原库一样的类型。而不是整形。这样就没问题了 |
starrycheng 发表于 2016-9-27 21:14 我想着既然小丽的age为空,我设置age空出来不设值为:4,'小丽',,'女'。但是sqoop从hdfs抽取数据的时候也报错,这个位置是空的也要有值,我就将这里赋值为NULL,结果为4,'小丽',NULL,'女'。 然后重新执行job就是null转变为number报错。 这种数据类型应该怎么解决才好 |
starrycheng 发表于 2016-9-27 21:14 问题就是现在有一堆需要处理的int类型数据的值就是null......有的时候就是前人处理数据不规范,后人遭殃啊 |