【问题标题】:how to call a pig script within another pig script如何在另一个猪脚本中调用猪脚本
【发布时间】:2011-09-26 15:33:16
【问题描述】:

我在 hdfs 中有一个包含 100 列的文件,我想使用 pig 对其进行处理。我想将此文件加载到一个单独的猪脚本中具有列名的元组中,并从其他猪脚本中重用此脚本。我该怎么做?

假设这个 100 列的 pig 脚本是 - 100col.pig。如何从 anotherone.pig 中调用它?

【问题讨论】:

    标签: hadoop apache-pig


    【解决方案1】:

    检查exec 命令(用于批处理)或run 命令(用于交互式脚本)。此外,如果您需要使用(非 grunt)shell 命令,请检查 fs 命令。这是一个很好的参考:

    http://pig.apache.org/docs/r0.7.0/piglatin_ref2.html

    【讨论】:

    • 运行命令做到了! exec 在我的情况下不起作用,因为我希望 100col.pig 中定义的变量可以从我的第二个脚本中获得。 RUN做到了。谢谢!
    • 正如你所暗示的,RUN 有额外的副作用;另请参阅 this later SO answer,它解释了有关 RUNEXEC 的更多信息。
    【解决方案2】:

    您应该尝试使用 pig 0.9 版中存在的宏。

    http://pig.apache.org/docs/r0.9.1/cont.html#macros

    【讨论】:

      【解决方案3】:

      这个答案有点晚了,但我最近正在研究这个要求,发现几乎没有任何帮助,直到我找到这个,希望这会对有需要的人有所帮助:

      ** 这段摘自 Programming Pig 书。

      长期以来,在 Pig Latin 中,整个脚本都需要放在一个文件中。这产生了 一些相当不愉快的数千行猪拉丁文脚本。从 0.9 开始,预处理器 可用于在另一个中包含一个 Pig Latin 脚本。与 宏,现在可以编写 更易于调试和重用的模块化 Pig Latin: import 用于在另一个中包含一个 Pig Latin 脚本:

      --main.pig

      import '../examples/ch6/dividend_analysis.pig';
      daily = load 'NYSE_daily' as (exchange:chararray, symbol:chararray,
      date:chararray, open:float, high:float, low:float, close:float,
      volume:int, adj_close:float);
      results = dividend_analysis(daily, '2009', 'symbol', 'open', 'close');
      

      import 将导入的文件直接写入您的 Pig Latin 脚本中,而不是 进口声明。在前面的示例中,divide_analysis.pig 的内容将 放置在 load 语句之前。请注意,无法导入文件 两次。如果你想多次使用相同的功能,你应该把它写成 一个宏并使用该宏导入文件。

      【讨论】:

        【解决方案4】:

        这里有上面提到的两个选项。 Pig 提供 run 和 exec 命令来满足您的要求。

        exec 命令用于调用独立运行的 pig 脚本。 run 命令用于运行 pigscipt 并保留其变量和别名。

        我想您需要查看运行命令才能满足您的要求。 http://pig.apache.org/docs/r0.9.1/cmds.html#run

        【讨论】:

          猜你喜欢
          • 2015-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多