因此,Java中有一个并发的hashmap,其优点是不会锁定整个哈希表,而只是锁定它的一部分.我想知道阵列是否有这样的结构.特别是当调整阵列大小时,锁定整个阵列是不可取的,尤其是在实时应用中.还有什么吗?
我知道我可以拆分安装了Hadoop的EC2集群(除非我错了).Hbase怎么样?我可以预先制作Hadoop和Hbase吗?或者我需要弄脏手.如果不是一种选择,最佳选择是什么?Cloudera显然有两个包.这是要走的路吗?
谢谢您的帮助.
因此,当直接使用hadoop时,很容易处理外部罐子.您有-libjars选项可以为您执行此操作.问题是你如何使用EMR做到这一点.必须有一种简单的方法.我认为CLI的-cachefile选项会这样做,但我无法以某种方式让它工作.任何人的想法?
谢谢您的帮助.
我刚开始学习Scala.我对OO设计很满意,而功能编程却不那么简单; 虽然,我编程的时间足够长,FP对我来说也不是完全不自然.从我斯卡拉冒险的第一天开始,我就已经说过了,对OO和FP之间正在发生的明显辩证法感到不安.显然,人们可以一路走来.我的第一个倾向是将类看作是一种包含我想要传递的功能的包,这平衡了功能方面的尺度.我觉得必须有一种更好的方法来平衡这种行为.在这种情况下,我也不确定如何处理某些熟悉的情况.例如,如果我有以下(人工)类:
class ValueGenerator {
def value() = {
"1"
}
def value(line: String) = {
line
}
}
Run Code Online (Sandbox Code Playgroud)
在OO编程中,我会value在需要时用适当的签名调用,以获得我需要的结果.这些方法具有相同的签名,因为它们在逻辑上对应于类似的操作.在OO中,我会传递对象引用,接收ValueGenerator对象的方法将value根据情况调用右边的对象.据我所知,至少我的倾向是,在Scala中,规范是传递方法.但在这种情况下,虽然方法做同样的事情,但它们没有相同的签名,因此不能互相替换(或者它们可以吗?).换句话说,无论函数的签名如何,发送方方法都能决定要发送的函数吗?这似乎不太可能,因为接收器不知道如何调用它.在这种情况下,正确的行动是什么.或者一个人的直觉本能?在谈到OO和FB时,你会遵循一条经验法则吗?
作为旁注,很有意思的是,我的一位正在学习Scala的朋友在这个问题上有与我一样的确切想法(或缺乏).
我总是在错误的背景下看到Throwable/Exception.但是我可以想到扩展一个Throwablejust来打破一堆递归方法调用会非常好的情况.比如说,您试图通过递归搜索的方式在树中查找并返回一些对象.一旦你发现它粘在一些Carrier extends Throwable并抛出它,并在调用递归方法的方法中捕获它.
正面:您不必担心递归调用的返回逻辑; 既然你找到了你需要的东西,为什么还要担心如何将这个引用备份到方法堆栈中.
否定:您有一个不需要的堆栈跟踪.该try/catch块也变得违反直觉.
这是一个愚蠢的简单用法:
public class ThrowableDriver {
public static void main(String[] args) {
ThrowableTester tt = new ThrowableTester();
try {
tt.rec();
} catch (TestThrowable e) {
System.out.print("All good\n");
}
}
}
public class TestThrowable extends Throwable {
}
public class ThrowableTester {
int i=0;
void rec() throws TestThrowable {
if(i == 10) throw new TestThrowable();
i++;
rec();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,是否有更好的方法来达到同样的目的?另外,以这种方式做事有什么不妥之处吗?
我想知道为什么我没有得到这个预期的结果:
String t = "1302248663033 <script language='javascript'>nvieor\ngnroeignrieogi</script>";
t.replaceAll("\n", "");
System.out.println(t);
Run Code Online (Sandbox Code Playgroud)
输出是:
1302248663033 <script language='javascript'>nvieor
gnroeignrieogi</script>
Run Code Online (Sandbox Code Playgroud)
所以我想知道为什么\n还有.有人知道吗?在某种程度上是特殊的吗?
编辑:
所以我遇到了将换行符与a匹配的问题.在正则表达式中,没有意识到使用DOTALL选项,所以我将在这里添加需要做的事情以供将来参考:
String text = null;
text = FileUtils.readFileToString(inFile);
Pattern p = Pattern.compile("<script language='javascript'>.+?</script>\n", Pattern.DOTALL);
text = p.matcher(text).replaceAll("");
out.write(text);
Run Code Online (Sandbox Code Playgroud) 我需要读取一组文件并将其分解为键值对,并将这些文件保存为光盘上该键的(键,值列表),就像map-reduce范例一样.但是一切都在一台电脑上.例如,我可以在不同文件上写入不同的列表,并使用密钥命名文件.这似乎是一种非常糟糕的做事方式.首先,如果你有十亿个密钥,你将得到十亿个文件.显然这不会起作用,我需要某种内存映射.我还必须有不同的线程来做map工作,所以如果他们要写入这个相同的缓冲区,它们之间必须有某种同步.如果我有一个键值缓冲区映射,并通过缓冲区同步,那么线程不应该踩到彼此的脚趾,所以我认为该部分应该工作.问题是如何将值映射到光盘.如何编写与同一文件中不同键对应的缓冲区?如果有人能指出我正确的方向,我将不胜感激.我对这方面的了解非常可怜.再次感谢.
我注意到java(因此可能是C)对此没有任何问题:
while(condition1) {
//do somethin'
} while(condition2);
Run Code Online (Sandbox Code Playgroud)
这是一样的:
while(condition1 && condition2) {
//do somethin'
}
Run Code Online (Sandbox Code Playgroud) java ×5
concurrency ×2
hadoop ×2
amazon-ec2 ×1
amazon-emr ×1
arrays ×1
file ×1
file-io ×1
file-mapping ×1
hbase ×1
jar ×1
loops ×1
newline ×1
oop ×1
replaceall ×1
scala ×1
stack ×1
throw ×1
throwable ×1
while-loop ×1