gpt4 book ai didi

hadoop - Pig 如何在 'load' 语句中使用 Hadoop Glob?

转载 作者:可可西里 更新时间:2023-11-01 14:14:08 24 4
gpt4 key购买 nike

因为我noted previously , Pig 不能很好地处理空(0 字节)文件。不幸的是,有很多方法可以创建这些文件(甚至是 within Hadoop utilitities )。

我认为我可以通过在 LOAD statement 中显式加载与给定命名约定匹配的文件来解决这个问题。使用 Hadoop's glob syntax .不幸的是,这似乎不起作用,因为即使我使用 glob 过滤已知良好的输入文件,我仍然遇到 0 字节故障 mentioned earlier .

这是一个例子:假设我在 S3 中有以下文件:

  • mybucket/a/b/(0 字节)
  • mybucket/a/b/myfile.log(>0 字节)
  • mybucket/a/b/yourfile.log(>0 字节)

如果我在我的 pig 脚本中使用这样的 LOAD 语句:

myData = load 's3://mybucket/a/b/*.log as ( ... )

我希望 Pig 不会在 0 字节文件上窒息,但它仍然如此。是否有技巧让 Pig 实际上只查看与预期的 glob 模式匹配的文件?

最佳答案

这是一个相当丑陋的解决方案,但不依赖于 * 通配符语法的 glob 似乎可以工作。因此,在我们的工作流程中(在调用我们的 pig 脚本之前),我们列出了我们感兴趣的前缀下方的所有文件,然后创建一个仅包含我们感兴趣的路径的特定 glob。

例如,在上面的例子中,我们列出“mybucket/a”:

hadoop fs -lsr s3://mybucket/a

返回文件列表以及其他元数据。然后我们可以从该数据创建 glob:

myData = load 's3://mybucket/a/b{/myfile.log,/yourfile.log}' as ( ... )

这需要更多的前端工作,但允许我们专门针对我们感兴趣的文件并避免 0 字节文件。

更新:不幸的是,我发现当 glob 模式变长时这个解决方案会失败; Pig 最终抛出异常“无法创建输入切片”。

关于hadoop - Pig 如何在 'load' 语句中使用 Hadoop Glob?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5750724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com