【问题标题】:Multiple input files in ScaldingScalding 中的多个输入文件
【发布时间】:2013-07-26 13:35:39
【问题描述】:

我想处理 大量 存储在 s3 中的文本文件。不幸的是,我不能简单地将列表与 MultipleTextLineFiles 源一起使用,因为方法代码变得太大并且会引发 java.lang.RuntimeException。

我最后一次尝试是将 jar 文件与包含文件列表的文本文件一起发送,然后使用“scala.io.Source.fromURL(getClass.getResource(filename)).getLines().toSeq”读取 但这会失败并抛出 NoSuchElementException。

有什么建议吗?

【问题讨论】:

  • 你能发布你的代码吗?
  • 为什么不直接传递包含所有文件的目录?

标签: scalding


【解决方案1】:

尝试将所有文​​件名作为 args 传递给一个类,然后相应地处理它们(循环遍历 args 列表,或单独处理它们):

import com.twitter.scalding.{ Args, Job }

class someScalaClass(args: Args) extends Job(args) {
   args.restrictTo(Set("arg1", "arg2") 
   val someFile = args.getOrElse("arg1").read
}

如果没有更多上下文信息,我不确定还能说什么,如果您可以编辑并提供摩尔详细信息

【讨论】:

    【解决方案2】:

    如果您的所有文件都在同一个文件夹中并且您需要处理所有文件,只需将文件夹路径作为输入 arg 传递给 TextLine。它将读取其中的所有文件(对于 s3,您需要在 EMR 上执行作业)。

    【讨论】:

    • 我正在尝试这样做,但我不断收到 java.io.FileNotFoundException 说我的输入参数“是一个目录”。你能详细说明吗?我正在运行 GitHub 上的 Scalding 存储库附带的 WordCountJob.scala 示例,并将一个包含三个输入文本文件的输入文件夹传递给它。
    • @thecomputerwhisperer 你在路径名的末尾有'/'吗?
    • 是的,还是一样的@piggybox。这与我尝试以本地模式运行有关吗?
    • @thecomputerwhisperer 您是否使用 scald.rb 来启动烫伤工作?不再推荐了。您应该按照使用 hadoop 级联项目中的 scalding 教程开始工作,这与您在生产中使用 scalding 的方式相同。
    • 我会说关注github.com/Cascading/scalding-tutorial。这是相同的烫伤教程,但已移植到 hadoop2 并使用 sbt 而不是 scald.rb 来启动。它在hadoop的伪本地模式下运行。在此之后,您可以阅读 API wiki 以熟悉各种烫伤功能
    猜你喜欢
    • 2017-05-02
    • 2014-07-22
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多