我在hdfs中有一个文件,并将其导出到sqoop表。请在下面找到日志详细信息:
Caused by: java.lang.RuntimeException: Can't parse input data: ' characters'
at tags.__loadFromFields(tags.java:335)
at tags.parse(tags.java:268)
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:89)
... 10 more
sqoop导出命令
sqoop export \
--connect "**************************************" \
--username=**** \
--password=***** \
--table tags \
--export-dir /user/cloudera/movie_lens/tags_no_header.csv \
--batch \
--input-lines-terminated-by '\n' \
--input-fields-terminated-by ',' \
--num-mappers 9 \
表结构:
create table tags
(userId integer
,movieId integer
,tag varchar(150)
,timestamp decimal
);
记录失败:
660,260,“虚构的世界,人物,故事,哲学” ,1436680217
根据我的理解,由于字符串中间的逗号','引起的模棱两可的解析而导致失败。
在这种情况下,请帮助我了解--input-enclosed-by和--input-escaped-by参数的用法,或者是否有其他解决方案。
最佳答案
我已经使用属性--input-optional-enclosed-by解决了它。
导出命令:
sqoop export \
--connect "jdbc:mysql://quickstart.cloudera:3306/movie_lens_db" \
--username=root \
--password=cloudera \
--table tags \
--export-dir /user/cloudera/escape_by_test.txt \
--batch \
--input-lines-terminated-by '\n' \
--input-fields-terminated-by ',' \
--input-optionally-enclosed-by '\"' \
--num-mappers 1 \
--outdir java_files
表数据:
+--------+---------+---------------------------------------------------+------------+
| userId | movieId | tag | timestamp |
+--------+---------+---------------------------------------------------+------------+
| 660 | 260 | imaginary world, characters, story, philosophical | 1436680217 |
| 212 | 69712 | genuine characters | 1260688086 |
+--------+---------+---------------------------------------------------+------------+
关于hadoop - 从hdfs到MySQL的sqoop导出失败,需要帮助以转义字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43112262/