gpt4 book ai didi

javascript - 通过Apache Pig UDF读取javascript文件

转载 作者:行者123 更新时间:2023-12-02 20:08:19 25 4
gpt4 key购买 nike

我在这里有一些(非常简化的)nodejs代码:

var fs = require('fs');

var derpfile = String(fs.readFileSync( './derp.txt', 'utf-8' ));
var derps = derpfile.split( '\n' );
for (var i = 0; i < derps.length; ++i) {
// do something with my derps here
}

问题是,我不能在Pig UDF的节点上使用节点(我知道;如果可以,请 let me know!)。当我用javascript查看“文件io”时,我看到的所有教程都在浏览器沙箱中。我需要从文件系统中读取一个文件,例如 hdfs:///foo/bar/baz/jane/derps.txt,我不能保证它将在CWD中,但是我将具有访问权限。所有这些教程似乎都涉及异步读取。我真的需要在这里进行阻塞调用,因为在读取此文件之前,pig作业无法开始。关于如何从另一个站点提取URL的解释也很多。

使用Java来完成这项任务实在令人沮丧,这太可怕了,而javascript确实是工作的正确工具(好吧,perl是,但是我没有选择那个……),我破坏像基本文件IO一样简单的东西。 :(

最佳答案

由于我从未使用过JavaScript编写过UDF,因此我无法与您谈论JavaScript的使用,但是通常来说,文件访问不是在UDF内部完成的,尤其是当您尝试访问HDFS上的内容时。 HDFS上的文件可通过NameNode进行访问,因此,在DataNode上执行文件后,您会很走运。您需要将文件放置在分布式缓存中。

Pig可以通过执行JOIN为您做到这一点。如果文件适合内存,则可以执行复制联接,这将利用分布式缓存。我将使用Pig将文件加载到一个关系中,使用GROUP relation ALL将其放入单个包中,然后对该文件以及与您感兴趣的关系中的所有记录进行CROSS。然后,您可以将此包装袋传递给您喜欢的任何UDF。就像是:

a = LOAD 'a' AS ...;
f = LOAD '/the/file/you/want' AS ...;

/* Put everything into a single bag */
f_bag = FOREACH (GROUP f ALL) GENERATE f;
/* Now you have a relation with one record;
that record has one field: the bag, f */
a2 = CROSS a, f_bag;
/* Now you have duplicated a and appended
the bag f to each record */

b = FOREACH a2 GENERATE yourUDF(field1, field2, f)

关于javascript - 通过Apache Pig UDF读取javascript文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19841375/

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