例如,所有Lists,Collections2,Sets都返回一个可修改的视图 - 从视图集合中删除将删除原始项目.
这很好用:
List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5, 6, -1, -2, -3, -4);
Collection<Integer> transform = Collections2.filter(
list, new Predicate<Integer>() {
public boolean apply(Integer input) {
return input.intValue() > 0;
}
});
transform.clear();
Run Code Online (Sandbox Code Playgroud)
当我使用Iterables和Iterators方法过滤/转换时,我得到umodifiable视图(即所有这些代码重用UnmodifibleIterator).
这不起作用:
List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5, 6, -1, -2, -3, -4);
Iterable<Integer> transform = Iterables.filter(
list, new Predicate<Integer>() {
public boolean apply(Integer input) {
return input.intValue() > 0;
}
});
Iterables.removeIf(transform, Predicates.<Object>alwaysTrue());
Run Code Online (Sandbox Code Playgroud)
我找不到Iterable和Collection/List/Set/Map之间的任何语义差异,那么为什么Guava中有如此不同的实现呢?
另一个奇怪的行为是第一种情况下的迭代器仍然不允许删除操作,但清除或删除/ removeAll工作正常.
因此通常对于20节点集群提交作业来处理3GB(200个分裂)的数据需要大约30秒并且实际执行大约1m.我想了解工作提交过程中的瓶颈是什么,并了解下一个报价
Per-MapReduce开销很重要:开始/结束MapReduce作业成本时间
我知道一些过程:1.数据拆分2. jar文件共享
我想在BootStrap类中运行特定的登录,具体取决于当前使用的开发或测试模式.
我怎样才能做到这一点?
如果我将数据从本地系统复制到HDFS,我可以确定它是在节点间均匀分布的吗?
PS HDFS保证每个块将存储在3个不同的节点上.但这是否意味着我的文件的所有块将在相同的3个节点上排序?或者HDFS会为每个新块随机选择它们吗?
我对scala有一些经验.我想将它介绍给10个成员的新项目.但是尽管scala具有所有表现力,但我不确定代码可以保持多么简单并转移给新的团队成员.目前我只研究了scala http://code.google.com/p/factorie/上的一个大项目和一些scala DSL(apache camel).所以我的问题是,与中级开发人员团队的java,python和groovy相比,scala可维护/可支持多少?
我打算做大型项目的复杂重构,默认的ide功能还不够.如果可能,请提供教程链接.
语言:java,xml
我谈论java重构的程序化api
示例我在项目中创建了新的api,我想自动折射一些代码来使用它,即源代码转换为ast树
我有以下简单的代码
def fib(i:Long,j:Long):Stream[Long] = i #:: fib(j, i+j)
(0l /: fib(1,1).take(10000000)) (_+_)
Run Code Online (Sandbox Code Playgroud)
它会抛出OutOfMemmoryError异常.我无法理解为什么,因为我认为所有部分都使用常量内存,即惰性评估流和foldLeft ...
这些代码也不起作用
fib(1,1).take(10000000).sum or max, min e.t.c.
Run Code Online (Sandbox Code Playgroud)
如何正确实现无限流并对其进行迭代操作?
Scala版本:2.9.0
另外scala javadoc说,foldLeft操作对于流是memmory安全的
/** Stream specialization of foldLeft which allows GC to collect
* along the way.
*/
@tailrec
override final def foldLeft[B](z: B)(op: (B, A) => B): B = {
if (this.isEmpty) z
else tail.foldLeft(op(z, head))(op)
}
Run Code Online (Sandbox Code Playgroud)
编辑:
使用迭代器的实现仍然无用,因为它会抛出$ {domainName}异常
def fib(i:Long,j:Long): Iterator[Long] = Iterator(i) ++ fib(j, i + j)
Run Code Online (Sandbox Code Playgroud)
如何在Scala中正确定义无限流/迭代器?
EDIT2:我不关心int溢出,我只是想了解如何在scala中创建无限流/迭代器等而没有副作用.
我的应用程序有几个隐式上下文.喜欢
import scala.collection.JavaConversions._
import HadoopConversion._
etc
Run Code Online (Sandbox Code Playgroud)
现在我必须复制粘贴每个文件的所有导入.是否可以将它们组合在一个文件中并只进行一次导入?
我的工作不需要排序,只需要按键聚合信息.所以我认为如果可以禁用所有信息的排序,以提高性能.
注意:我不能将reducers count设置为零,因为我需要在许多映射器之间聚合数据.我只对一个减速机的排序结果不感兴趣.
这是实现它的两种不同方式.
一个更短
implicit def toR1(s:String) = new { def getLength = s.length)}
Run Code Online (Sandbox Code Playgroud)
第二是更长
class R2(s:String){def getLength2 = s.length)}
implicit def toR2(s:String) = new R2(s)
Run Code Online (Sandbox Code Playgroud)
哪一个更好?