我已经多次看到以下语法定义了create/alter DDL语句中的列:
ALTER TABLE tbl ADD COLUMN col VARCHAR(20) NOT NULL DEFAULT "MyDefault"
Run Code Online (Sandbox Code Playgroud)
问题是:由于指定了默认值,是否还需要指定列不应该接受NULL?换句话说,DEFAULT不会呈现NOT NULL冗余吗?
在Java SE 7中(很可能在以前的版本中),Enum类声明如下:
public abstract class Enum<E extends Enum<E>>
extends Object
implements Comparable<E>, Serializable
Run Code Online (Sandbox Code Playgroud)
Enum类有一个带有此签名的静态方法:
T static<T extends Enum<T>> valueOf(Class<T> enumType, String name)
Run Code Online (Sandbox Code Playgroud)
但是没有静态方法:valueOf(String)
在Enum类中定义,也不在Enum所属的层次结构中向上定义.
问题是valueOf(String)
从哪里来的?它是语言的一个特性,即编译器内置的功能吗?
我有一个类代表一对相同类型的两个值(类型可以是任何特定类型的集合):
public class Pair<E extends AClass>{
private E var1;
private E var2;
}
Run Code Online (Sandbox Code Playgroud)
这个类由框架使用,因此它需要一个无参构造函数,我必须在其中实例化2个变量(var1,var2):
public class Pair<E extends AClass>{
private E var1;
private E var2;
public Pair(){
var1 = invoke constructor of type E;
var2 = invoke constructor of type E
}
}
Run Code Online (Sandbox Code Playgroud)
这里显然有很多问题:
为了实例化变量,我应该以某种方式知道它的确切类型并调用该特定类型的构造函数; 在最好的情况下,这意味着在构造函数中有一个非常大的if else语句,如:
public Pair(){
if(var1 instanceof SpecificType1){
var1 = new SpecificType1();
var2 = new SpecificType2();
}
}
Run Code Online (Sandbox Code Playgroud)即使我如上所述,我也会遇到一些问题,因为var1被声明为E类,我在尝试实例化SpecficType1并将结果对象分配给var1/var2时会遇到类型不匹配错误.为了使它工作,我必须转向E:
var1 = (E)new SpecificType1();
Run Code Online (Sandbox Code Playgroud)但是这会破坏编译时类型检查,因为我正在尝试将特定类型转换为泛型类型.
这是Java中Generics的限制还是这个场景对于使用Generics来说是一个糟糕的局面?
为什么1个工作而2个不工作?
1:
public List<? extends Integer> l1;
public List<? extends Number> l2 = l1;
Run Code Online (Sandbox Code Playgroud)
2:
public List<U> l1;
public List<S> l2 = l1;
//where U and S have been previously defined as: **S extends Number,U extends Integer**
Run Code Online (Sandbox Code Playgroud) 这个问题并不是指在整个集群中分发罐子以供工人使用它们.
它指的是在客户端计算机上指定许多其他库.更具体一点:我正在尝试运行以下命令以检索SequenceFile的内容:
/path/to/hadoop/script fs -text /path/in/HDFS/to/my/file
Run Code Online (Sandbox Code Playgroud)
它抛出了这个错误: text: java.io.IOException: WritableName can't load class: util.io.DoubleArrayWritable
我有一个名为DoubleArrayWritable的可写类.事实上,在另一台计算机上,一切运行良好.
我试图设置HADOOP_CLASSPATH
包含该类但没有结果的jar.实际上,在运行时:
/path/to/hadoop/script classpath
Run Code Online (Sandbox Code Playgroud)
结果不包含我添加到HADOOP_CLASSPATH的jar.
问题是:在运行hadoop时如何指定额外的库(通过额外的意思是其他库而不是hadoop脚本在类路径中自动包含的库)
一些可能有用的信息:
export HADOOP_CLASSPATH=$HADOOP_HOME/lib
这可能解释了为什么忽略了我的HADOOP_CLASSPATH env var.我在Java中有一系列双打:arr1
我想要排序.最可能的第一种选择是实用方法Arrays.sort(double[])
.
这个想法是,我想同样的变化(在例如值index i
在与值互换index j
中arr1
),以反映在另一个整数数组:arr2
(即在相同的索引值也发生变化,在读出arr2
).
有没有一种简单的方法(一招)在Java中实现这一目标?或者唯一的方法是自己实现排序算法?
更新:我看到人们建议用一个包含2个值的对象数组替换两个数组(一个来自arr1
,一个来自arr2
).这不会带来一些效率惩罚.换句话说,排序对象数组的效率是否低于基本类型数组(在这种情况下是双打的)?
数据完全是静态的.它很大(它适合内存)但是静态.
如何向所有减速机发送特定记录?
我知道Partitioner类及其功能,但我没有看到任何简单的方法来确保记录转到所有reducers.
基本上,分区程序有这种方法:
int getPartition(K2 key,
V2 value,
int numPartitions)
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是让Partitioner和Mapper协作如下:Mapper保持输出记录的次数等于reduce任务的数量,Partitioner返回所有的int(从0到numPartitions-1),这样确保记录到达所有分区.
有没有其他更明智的方法来解决这个问题?例如,对于我需要发送到所有分区的记录,我返回-1,框架在看到返回的-1时为我做了这个.
我有两套:
Set<Attribute> set1 = new HashSet<Attribute>(5);
Set<Attribute> set2 = new HashSet<Attribute>(5);
//add 5 attribute objects to each of them. (not necessarily the same objects)
assertEquals(set1,set2); //<--- returns false, even though
//the added attribute objects are equal
Run Code Online (Sandbox Code Playgroud)
根据我的要求,覆盖了属性的equals方法:
public abstract class Attribute implements Serializable{
public int attribute;
public abstract boolean isNumerical();
@Override
public boolean equals(Object other){
if(!(other instanceof Attribute)){
return false;
}
Attribute otherAttribute = (Attribute)other;
return (this.attribute == otherAttribute.attribute &&
this.isNumerical() == otherAttribute.isNumerical());
}
}
Run Code Online (Sandbox Code Playgroud)
在调试时,甚至没有调用equals方法!
有任何想法吗?
我有两个文件:
file1的格式为:
field1;field2;field3;field4
Run Code Online (Sandbox Code Playgroud)
(file1最初未排序)
file2的格式为:
field1
Run Code Online (Sandbox Code Playgroud)
(file2已排序)
我运行以下两个命令:
sort -t\; -k1 file1 -o file1 # to sort file 1
join -t\; -1 1 -2 1 -o 1.1 1.2 1.3 1.4 file1 file2
Run Code Online (Sandbox Code Playgroud)
我收到以下消息:
join: file1:27497: is not sorted: line_which_was_identified_as_out_of_order
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
(我也尝试对file1进行排序,考虑到整条生产线不仅是该生产线的第一批,而且没有成功)
sort -t\; -c file1
不输出任何东西.在第27497行附近,情况确实很奇怪,这意味着排序无法正常工作:
XYZ113017;...
line 27497--> XYZ11301;...
XYZ11301;...
Run Code Online (Sandbox Code Playgroud)