0

我正在尝试将 map 子句与 Hive 一起使用,但我遇到了语法问题,并且没有找到很多我的用例示例。当我不得不使用外部脚本处理表的列之一时,我使用了 map 子句。

我有一个名为 的 python 脚本run,它接受一个命令行参数并输出三个空格分隔的值。所以我只是做了:

FROM(MAP
        tablename.columnName
     USING
        'run' AS
        result1, result2, result3
     FROM
        tablename
    ) map_output
    INSERT OVERWRITE TABLE results SELECT *;

现在我有一个 python 脚本,它接收更多的参数,并尝试了一些不起作用的东西,也找不到这方面的例子。我做了很明显的事情:

FROM
    (MAP
        numAgents, alpha, beta, burnin, nsteps, thin
     USING
        'runAuthorityMCMC' AS numAgents, alpha, beta, energy, avgDegree, maxDegree, accept
     FROM
        parameters
    ) map_output
INSERT OVERWRITE TABLE results SELECT *;

A user-supplied transfrom script has exited with error code 2 instead of 0.但是当我运行时出现错误runAuthorityMCMC,从该表中采样了 6 个命令行参数,它运行良好。

在我看来,它试图在根本不传递参数的情况下运行脚本。如果是这种情况,在其中一条错误消息中,我得到了我所期望的输出。做我想做的事情的正确语法是什么?

编辑:

确认 - 这是错误消息的一部分:

usage: runAuthorityMCMC [-h]
                        numAgents normalizedBrainCapacity ecologicalPressure
                        burnInSteps monteCarloSteps thiningRatio
runAuthorityMCMC: error: too few arguments

这正是我期望的输出,但论点太少了。脚本应该有六个参数。

4

1 回答 1

1

好的,也许这里的词汇有所不同,但 hive 不会将值作为“参数”发送到脚本。它们是通过标准输入读入的(这与将某些东西作为参数传递不同)。此外,您可以尝试发送数据以/bin/cat查看实际发送到蜂巢的内容。如果我没记错的话,这些值是以制表符分隔发送的,并且从脚本发出的结果也应该是制表符分隔的。

尝试从脚本中的 stdout(或 stderr)打印内容,您将在 jobtracker 日志中看到结果。这将帮助您调试。

于 2012-12-30T01:17:41.237 回答