如何在 PIG 中导入/加载 .csv 文件?

Posted

技术标签:

【中文标题】如何在 PIG 中导入/加载 .csv 文件?【英文标题】:How to Import/Load .csv file in PIG? 【发布时间】:2014-09-01 03:55:34 【问题描述】:

假设有一个文本文件选项卡受限 (datetemp.txt) 我想将此文本文件加载到 pig 中进行处理,但是当我在下面的行中输入时,它给了我错误:

grunt> inputfile= load '/training/pig/datetemp.txt' using PigStorage() As (EventID: chararray,eventdate: chararray,count:int);

grunt> 转储输入文件;

2014-09-06 08:41:23,527 [main] INFO org.apache.pig.tools.pigstats.ScriptState - 脚本中使用的 Pig 功能:未知 2014-09-06 08:41:23,544 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MRCompiler - 文件连接阈值:100 乐观?错误的 2014-09-06 08:41:23,548 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MultiQueryOptimizer - 优化前的 MR 计划大小:1 2014-09-06 08:41:23,548 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MultiQueryOptimizer - 优化后的 MR 计划大小:1 2014-09-06 08:41:23,551 [main] INFO org.apache.pig.tools.pigstats.ScriptState - Pig 脚本设置已添加到作业中 2014-09-06 08:41:23,551 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.JobControlCompiler - mapred.job.reduce.markreset.buffer.percent 未设置,设置为默认值 0.3 2014-09-06 08:41:23,552 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.JobControlCompiler - 创建 jar 文件 Job2739171785773930333.jar 2014-09-06 08:42:39,608 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.JobControlCompiler - jar 文件 Job2739171785773930333.jar 创建 2014-09-06 08:42:39,612 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.JobControlCompiler - 设置单一存储作业 2014-09-06 08:42:39,619 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 1 个 map-reduce 作业等待提交。 2014-09-06 08:42:39,630 [Thread-12] WARN org.apache.hadoop.mapred.JobClient - 使用 GenericOptionsParser 解析参数。应用程序应该实现同样的工具。 2014-09-06 08:42:39,891 [Thread-12] INFO org.apache.hadoop.mapred.JobClient - 清理暂存区 hdfs://192.168.195.130:8020/var/lib/hadoop-hdfs/cache /mapred/mapred/staging/training/.staging/job_201408292336_0009 2014-09-06 08:42:39,891 [Thread-12] 错误 org.apache.hadoop.security.UserGroupInformation - PriviledgedActionException as:training (auth: SIMPLE) 原因:org.apache.pig.backend.executionengine.ExecException:错误2118:输入路径不存在:hdfs://192.168.195.130:8020/training/pig/datetemp.txt 2014-09-06 08:42:40,119 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 0% 完成 2014-09-06 08:42:40,125 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 作业 null 失败!停止运行所有相关作业 2014-09-06 08:42:40,125 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 100% 完成 2014-09-06 08:42:40,131 [main] 错误 org.apache.pig.tools.pigstats.SimplePigStats - 错误 2997:无法从后端错误重新创建异常:org.apache.pig.backend.executionengine.ExecException:错误2118:输入路径不存在:hdfs://192.168.195.130:8020/training/pig/datetemp.txt 在 org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits(PigInputFormat.java:285) 在 org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:1014) 在 org.apache.hadoop.mapred.JobClient.writeSplits(JobClient.java:1031) 在 org.apache.hadoop.mapred.JobClient.access$600(JobClient.java:172) 在 org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:943) 在 org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:896) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:396) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332) 在 org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:896) 在 org.apache.hadoop.mapreduce.Job.submit(Job.java:531) 在 org.apache.hadoop.mapreduce.lib.jobcontrol.ControlledJob.submit(ControlledJob.java:318) 在 org.apache.hadoop.mapreduce.lib.jobcontrol.JobControl.startReadyJobs(JobControl.java:238) 在 org.apache.hadoop.mapreduce.lib.jobcontrol.JobControl.run(JobControl.java:269) 在 java.lang.Thread.run(Thread.java:662) 在 org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher$1.run(MapReduceLauncher.java:260) 引起:org.apache.hadoop.mapreduce.lib.input.InvalidInputException:输入路径不存在:hdfs://192.168.195.130:8020/training/pig/datetemp.txt 在 org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:231) 在 org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigTextInputFormat.listStatus(PigTextInputFormat.java:36) 在 org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:248) 在 org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits(PigInputFormat.java:273) ... 15 更多

2014-09-06 08:42:40,131 [main] 错误 org.apache.pig.tools.pigstats.PigStatsUtil - 1 个地图缩减作业失败! 2014-09-06 08:42:40,135 [main] INFO org.apache.pig.tools.pigstats.SimplePigStats - 脚本统计:

HadoopVersion PigVersion UserId StartedAt FinishedAt 功能 2.0.0-cdh4.1.1 0.10.0-cdh4.1.1 培训 2014-09-06 08:41:23 2014-09-06 08:42:40 未知

失败!

失败的作业: JobId 别名功能消息输出 N/A inputfile MAP_ONLY 消息:org.apache.pig.backend.executionengine.ExecException:错误 2118:输入路径不存在:hdfs://192.168.195.130:8020/training/pig/datetemp.txt 在 org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits(PigInputFormat.java:285) 在 org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:1014) 在 org.apache.hadoop.mapred.JobClient.writeSplits(JobClient.java:1031) 在 org.apache.hadoop.mapred.JobClient.access$600(JobClient.java:172) 在 org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:943) 在 org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:896) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:396) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1332) 在 org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:896) 在 org.apache.hadoop.mapreduce.Job.submit(Job.java:531) 在 org.apache.hadoop.mapreduce.lib.jobcontrol.ControlledJob.submit(ControlledJob.java:318) 在 org.apache.hadoop.mapreduce.lib.jobcontrol.JobControl.startReadyJobs(JobControl.java:238) 在 org.apache.hadoop.mapreduce.lib.jobcontrol.JobControl.run(JobControl.java:269) 在 java.lang.Thread.run(Thread.java:662) 在 org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher$1.run(MapReduceLauncher.java:260) 引起:org.apache.hadoop.mapreduce.lib.input.InvalidInputException:输入路径不存在:hdfs://192.168.195.130:8020/training/pig/datetemp.txt 在 org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:231) 在 org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigTextInputFormat.listStatus(PigTextInputFormat.java:36) 在 org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:248) 在 org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits(PigInputFormat.java:273) ... 15 更多 hdfs://192.168.195.130:8020/tmp/temp-1004538676/tmp1582688785,

输入: 从“/training/pig/datetemp.txt”读取数据失败

输出: 无法在“hdfs://192.168.195.130:8020/tmp/temp-1004538676/tmp1582688785”中产生结果

计数器: 写入的总记录:0 写入的总字节数:0 可溢出内存管理器溢出计数:0 主动溢出的袋子总数:0 主动泄露的记录总数:0

工作 DAG: 空

2014-09-06 08:42:40,135 [main] INFO org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - 失败! 2014-09-06 08:42:40,142 [main] 错误 org.apache.pig.tools.grunt.Grunt - 错误 1066:无法打开别名输入文件的迭代器 日志文件中的详细信息:/home/training/pig_1410006833865.log

请帮帮我..!!

【问题讨论】:

对于在寻找ERROR 1066: Unable to open iterator for alias 时发现此帖子的人,这里是generic solution。 【参考方案1】:

PigStorage 区分大小写。使用 PigStorage 而不是 pigstorage。

【讨论】:

@Prix,如果我的回答解决了您的问题,请将其标记为已回答。 错误 org.apache.pig.tools.grunt.Grunt - 错误 1066:无法打开迭代器 :) 那是一个不同的、不相关的错误。您可能想提供有关该错误的更多详细信息。 我看到错误“输入路径不存在:hdfs://192.168.195.130:8020/training/pig/datetemp.txt”。验证文件是否确实存在。【参考方案2】:

您的问题头条新闻说您正在尝试加载 CSV 文件。为此,我在LOAD 语句中对using org.apache.pig.piggybank.storage.CSVExcelStorage() 很幸运,如https://martin.atlassian.net/wiki/x/WYBmAQ 所示。

【讨论】:

【参考方案3】:

你为什么不写 PigStorage('\t') 你已经提到你有制表符分隔的文件而不是 PigStorage()

提到的代码-

grunt> inputfile= load '/training/pig/datetemp.txt' using PigStorage() As (EventID: chararray,eventdate: chararray,count:int);

也许这可以解决你的问题。

如果是其他原因,请告诉我。

【讨论】:

【参考方案4】:
hdfs://192.168.195.130:8020/training/pig/datetemp.txt 

在您的 hdfs 中找不到文件 wat!确保输入文件放置在上述位置。

【讨论】:

【参考方案5】:

你检查过输入路径是否存在吗?

试试:

fs -ls /training/pig/ in Grunt Shell

如果它在列表中显示 datetemp.txt,那么它将正常工作,否则给出正确的输入路径

【讨论】:

【参考方案6】:

日志清楚地告诉错误。

org.apache.pig.backend.executionengine.ExecException: 错误 2118: 输入路径不存在: hdfs://192.168.195.130:8020/training/pig/datetemp.txt

你能检查文件是否存在于 HDFS 中吗? 您还可以检查您的 pig 是否在 mapreduce 模式或本地模式下运行。

【讨论】:

【参考方案7】:

您可以在 PigStorage 类中指定 ',' 来读取 CSV 文件。

查询看起来像:

grunt> inputfile= load '/training/pig/datetemp.txt' using PigStorage(',') As (EventID: chararray,eventdate: chararray,count:int);

grunt> dump inputfile;

并确保您在 HDFS 上有文件“/training/pig/datetemp.txt”。 试运行:hadoop fs -ls /training/pig/datetemp.txt

【讨论】:

以上是关于如何在 PIG 中导入/加载 .csv 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中导入 CSV 文件?

如何更新/覆盖当前在 R 中导入的 csv 文件

如何在R中导入CSV文件? [关闭]

如何在 django 项目中导入和显示 csv 文件

如何在 R 中导入文件名中包含特定单词的 .csv 文件?

如何使用 read_csv 从文件中导入某些行