给定一组可能重复的对象,我想最终得到每个对象的出现次数.我通过初始化一个空来做Map,然后迭代Collection并将对象映射到它的计数(每次地图已经包含对象时递增计数).
public Map<Object, Integer> countOccurrences(Collection<Object> list){
Map<Object, Integer> occurrenceMap = new HashMap<Object, Integer>();
for(Object obj: list){
Integer numOccurrence = occurrenceMap.get(obj);
if(numOccurrence == null){
//first count
occurrenceMap.put(obj, 1);
} else{
occurrenceMap.put(obj, numOccurrence++);
}
}
return occurrenceMap;
}
Run Code Online (Sandbox Code Playgroud)
对于计算出现次数的简单逻辑,这看起来过于冗长.有更优雅/更短的方式吗?我对一个完全不同的算法或java语言特定功能开放,允许更短的代码.
自从我开始学习python以来已经过了几天,此时我偶然发现了==它is.来自java背景我假设==通过对象id和is值进行比较,但是这样做
>>> a = (1,2)
>>> b = (1,2)
>>> a is b
False
>>> a == b
True
Run Code Online (Sandbox Code Playgroud)
好像is相当于java ==和python ==相当于java的equals().这是考虑is和之间区别的正确方法==吗?或者有一个警告?
在EMR中,有没有办法在给定配置键的情况下使用yarn命令获取配置的特定值?
例如,我想做这样的事情
yarn get-config yarn.scheduler.maximum-allocation-mb
Run Code Online (Sandbox Code Playgroud) 我从Joshua Bloch给出的谷歌I/O益智游戏中得到了这个.这是代码
public class Glommer<T> {
String glom(Collection<?> obj){
String result = "";
for(Object o : obj){
result += o;
}
return result;
}
int glom(List<Integer> ints){
int result = 0;
for(int i : ints){
result += i;
}
return result;
}
public static void main(String args[]){
List<String> strings = Arrays.asList("1", "2", "3");
System.out.println(new Glommer().glom(strings));
}
Run Code Online (Sandbox Code Playgroud)
这个main方法抛出一个异常,因为它new Glommer是一个原始类型,因此所有的泛型都Glommer被删除了,所以最终调用int glom(List<Integer> ints)而不是String glom(Collection<?> obj).
我的问题是,即使我打电话glom()是new Glommer<Integer>().glom(strings)不是应该把它调用的int glom(List<Integer> ints)方法,因为由于类型擦除,这种方法是有效的 …
在查看一些遗留代码时,我遇到了一些令人困惑的事情:
public class A{
public A(){
//constructor
}
public void foo(){
//implementation ommitted
}
}
public class B{
public void bar(){
A a = new A(){
{ foo(); }
}
}
}
Run Code Online (Sandbox Code Playgroud)
在调试模式下运行代码后,我发现在{ foo() }调用构造函数后调用匿名块A().上述功能与以下功能有何不同:
public void bar(){
A a = new A();
a.foo();
}
Run Code Online (Sandbox Code Playgroud)
?我认为它们在功能上是等价的,并且认为后一种方式是更好/更清晰的编写代码的方式.
有没有办法防止脚本的目录被添加到python3中的sys.path?由于导入在 python 中是相对的,我遇到了导入冲突。我正在使用的一个遗留项目logger.py在脚本的根目录中有一个文件,该文件与内置的logger.
我使用的自定义构建系统最终会创建指向所有文件和依赖项的符号链接,并且在生产中,在运行时我们使用该-E标志来忽略任何系统集PYTHONPATH并将路径设置为我们想要的。但是由于这种冲突,从 PyCharm 运行测试/脚本不起作用。
我正在阅读的一本书声称,检查二叉树是否是二叉树B的子树的一种方法A是构建两个树的inorder和preorder字符串(表示每棵树的顺序和前序遍历的字符串),并检查是否inorder_B是的子inorder_A 和 preorder_B是的子串preorder_A.请注意,它声称,你必须检查串匹配两者中序和序字符串.
是不是真的有必要检查一个串匹配两者中序和序字符串?检查两者都不够吗?有人可以提供一个证明我错的例子(即证明书中的权利要求)吗?我无法想出一个例子,其中两棵树是不相等的,但预订或顺序字符串匹配.
如果在java中执行关闭挂钩期间抛出未捕获的异常,jvm是否立即退出而不运行其余已注册的关闭挂钩(如果有)?来自javadocs:
通过调用线程的ThreadGroup对象的uncaughtException方法,可以在shutdown钩子中处理未捕获的异常,就像在任何其他线程中一样.此方法的默认实现将异常的堆栈跟踪打印到System.err并终止该线程; 它不会导致虚拟机退出或停止.
似乎其他关机钩子应该运行...
作为一个后续问题,拥有一段可能在关闭钩子中引发异常的代码可能不是一个好主意?如果你无法避免它,尝试捕获关闭钩子内的异常是一个好习惯吗?
我正在使用spark sql对我的数据集运行查询。查询的结果很小,但仍处于分区状态。
我想合并结果DataFrame并按列对行进行排序。我试过了
DataFrame result = sparkSQLContext.sql("my sql").coalesce(1).orderBy("col1")
result.toJSON().saveAsTextFile("output")
Run Code Online (Sandbox Code Playgroud)
我也试过
DataFrame result = sparkSQLContext.sql("my sql").repartition(1).orderBy("col1")
result.toJSON().saveAsTextFile("output")
Run Code Online (Sandbox Code Playgroud)
输出文件按块排序(即分区是有序的,但数据帧不是整体上有序的)。例如,代替
1, value
2, value
4, value
4, value
5, value
5, value
...
Run Code Online (Sandbox Code Playgroud)
我懂了
2, value
4, value
5, value
-----------> partition boundary
1, value
4, value
5, value
Run Code Online (Sandbox Code Playgroud)
spark-env.sh如果我的文件中有如下行
export MY_JARS==$(jars=(/my/lib/dir/*.jar); IFS=,; echo "${jars[*]}")
Run Code Online (Sandbox Code Playgroud)
这给了我一个以逗号分隔的 jar 列表/my/lib/dir,有没有办法我可以指定
spark.jars $MY_JARS
Run Code Online (Sandbox Code Playgroud)
在里面spark-defaults.conf?
java ×4
apache-spark ×2
python ×2
algorithm ×1
binary-tree ×1
collections ×1
emr ×1
generics ×1
hadoop ×1
hadoop-yarn ×1
hadoop2 ×1
jvm ×1
python-3.x ×1
types ×1