我正在尝试提取pig中以管道分隔的数据。下面是我的命令
L = LOAD 'entirepath_in_HDFS/b.txt/part-m*' USING PigStorage('||');
我收到以下错误
2016-08-04 23:58:21,122 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: Pig script failed to parse:
<line 1, column 4> pig script failed to validate: java.lang.RuntimeException: could not instantiate 'PigStorage' with arguments '[||]'
我的输入示例文件正好有5行,如下所示
POS_TIBCO||HDFS||POS_LOG||1||7806||2016-07-18||1||993||0
POS_TIBCO||HDFS||POS_LOG||2||7806||2016-07-18||1||0||0
POS_TIBCO||HDFS||POS_LOG||3||7806||2016-07-18||1||0||5
POS_TIBCO||HDFS||POS_LOG||4||7806||2016-07-18||1||0||0
POS_TIBCO||HDFS||POS_LOG||5||7806||2016-07-18||1||0||19.99
我尝试了几个选项,比如在分隔符之前使用反斜杠(| |,| |),但都失败了。另外,我尝试使用schema,但得到了相同的错误,我使用的是hortonworks(hdp2.2.4)和pig(0.14.0)。
感谢您的帮助。如果你需要更多的细节,请告诉我。
2条答案
按热度按时间mum43rcc1#
我已经面对了这个案子
PigStorage
我想是源代码PigStorage
参数应仅解析为一个字符。所以我们可以使用以下代码:
如果您知道有多少列,这会很有帮助,而且不会影响性能,因为它是Map端。
rqcrx0a62#
使用pigstorage加载数据时,它只需要单个字符作为分隔符。但是,如果仍然要实现这一点,可以使用myregexloader-