Groovy 中什么时候使用each闭包以及什么时候使用for循环。两者实际上都做同样的事情。
groovy:000> a = [1, 2, 3, 4]
===> [1, 2, 3, 4]
groovy:000> a.each {
groovy:001> println it
groovy:002> }
1
2
3
4
===> [1, 2, 3, 4]
groovy:000> for (it in a) {
groovy:001> println it
groovy:002> }
1
2
3
4
===> null
Run Code Online (Sandbox Code Playgroud)
闭包each返回列表。所以我可能可以使用它代替for循环,但反之亦然,对吗?
是否有一种简单的方法可以在不使用反射的情况下获取案例类中所有变量的值.我发现反射很慢,不应该用于大规模应用中的重复任务.
我想要做的是覆盖toString方法,使它返回case类中所有字段的制表符分隔值,其顺序与它们在那里定义的顺序相同.
我正在使用CDH4,并使用新的mapreduce API编写了MapReduce应用程序.我已经针对hadoop-core-1.0.3.jar编译了它,当我在我的Hadoop集群上运行它时,我得到错误:
错误:找到接口org.apache.hadoop.mapreduce.TaskAttemptContext,但是类是预期的
我提到了这个StackOverflow问题似乎在谈论同样的问题.答案表明我们针对Hadoop-core-2.X.jar文件编译代码,但我无法找到类似的东西.
那么如何编译它以便它在CDH4中完美运行.
所以我以前搞过网站,但这次我很难过.我试图在Biography.com上搜索一个人并检索他/她的传记.但每当我使用urllib2并查询网站搜索网站时:http://www.biography.com/search/我得到一个没有数据的空白页面.
当我通过单击View Source查看浏览器中生成的源时,我仍然看不到任何数据.当我使用Chrome的开发者工具时,我会找到一些数据,但仍然没有链接导致传记.
我曾尝试更改用户代理,添加引用,在Python中使用cookie但无济于事.如果有人可以帮助我完成这项任务,那将非常有帮助.
我打算将这个文本用于我的NLP项目,最坏的情况是,我必须手动复制粘贴文本.但我希望不会那样.
groovy:000> ['homepages/gg','a','b','c','d'].inject([]) { list, conf -> if (!conf.contains('homepage')) { list << conf.trim() } }
ERROR java.lang.NullPointerException:
Cannot invoke method leftShift() on null object
at groovysh_evaluate$_run_closure1.doCall (groovysh_evaluate:3)
groovy:000> ['homepages/gg','a','b','c','d'].inject([]) { list, conf -> conf.contains('homepage') ? list : list << conf.trim() }
===> [a, b, c, d]
Run Code Online (Sandbox Code Playgroud)
为什么我NullPointerException在第一种情况下得到 a而在第二种情况下没有?我正在使用 Groovy 2.3.7。
我有很多输入文件,我想根据最后附加的日期处理选定的文件.我现在很困惑我在哪里使用globStatus方法来过滤掉文件.
我有一个自定义的RecordReader类,我试图在其下一个方法中使用globStatus,但它没有成功.
public boolean next(Text key, Text value) throws IOException {
Path filePath = fileSplit.getPath();
if (!processed) {
key.set(filePath.getName());
byte[] contents = new byte[(int) fileSplit.getLength()];
value.clear();
FileSystem fs = filePath.getFileSystem(conf);
fs.globStatus(new Path("/*" + date));
FSDataInputStream in = null;
try {
in = fs.open(filePath);
IOUtils.readFully(in, contents, 0, contents.length);
value.set(contents, 0, contents.length);
} finally {
IOUtils.closeStream(in);
}
processed = true;
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我知道它返回一个FileStatus数组,但我如何使用它来过滤文件.有人可以解释一下吗?
我想编写一个可以处理文本和zip文件的MapReduce应用程序.为此,我想使用不同的输入格式,一个用于文本,另一个用于zip.有可能这样做吗?
我已经成功安装了ubuntu 12.04和hadoop 2.4.0.
输入jps命令后,我找到如下输出
4135 jps
2582 SeconadaryNameNode
3143 NodeManager
2394 Namenode
2391 Datanode
3021 ResourceManager
Run Code Online (Sandbox Code Playgroud)
现在我想运行wordcount示例.
我创建了一个包含一些内容的.txt文件
现在每当我尝试通过遵循此命令将其复制到hadoop hdfs时
hdfs -copyFromLocal /app/hadoop/tmp/input.txt /wordcount/input.txt
Run Code Online (Sandbox Code Playgroud)
(路径中的"wordcount"是我创建的目录)
但它表明
unrecognised option: -copyFromLocal
could not create the java virtual machine
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
我_._在一些Spock规范的源代码中看到过.有谁知道这意味着什么?
例如,
def "test something"() {
given:
someClass = Mock(SomeClass)
and:
1 * someClass.someMethod() >> returnSomething
0 * _._
when:
String str = someClass.someMethod().toString()
then:
str == 'returnedValue'
}
Run Code Online (Sandbox Code Playgroud) 我试图检查一个特定的字符串是否是一个Int(或Boolean或Long等等等等),但并不真的需要它被它解析为一个Int(或其他).我可以想到两个选择.首先,要做一个var.toInt.toString或只是返回toInt调用的实际字符串,如果它是一个Int.虽然两者都很好,但我想知道前者与后者相比是否更加广泛.仅供参考,我不会以这种方式解析非常长的字符串,但我会查看数TB的数据.