小编Raz*_*van的帖子

SQL列定义:默认值而不是空冗余?

我已经多次看到以下语法定义了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冗余吗?

sql ddl default-value notnull

71
推荐指数
3
解决办法
9万
查看次数

Enum.valueOf(String)方法来自哪里?

在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)从哪里来的?它是语言的一个特性,即编译器内置的功能吗?

java compiler-construction enums value-of

26
推荐指数
1
解决办法
2万
查看次数

Java Generics限制或错误用法?

我有一个类代表一对相同类型的两个值(类型可以是任何特定类型的集合):

  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)

这里显然有很多问题:

  1. 为了实例化变量,我应该以某种方式知道它的确切类型并调用该特定类型的构造函数; 在最好的情况下,这意味着在构造函数中有一个非常大的if else语句,如:

     public Pair(){
           if(var1 instanceof SpecificType1){
              var1 = new SpecificType1(); 
              var2 = new SpecificType2();
           }
      }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 即使我如上所述,我也会遇到一些问题,因为var1被声明为E类,我在尝试实例化SpecficType1并将结果对象分配给var1/var2时会遇到类型不匹配错误.为了使它工作,我必须转向E:

       var1 = (E)new SpecificType1();
    
    Run Code Online (Sandbox Code Playgroud)

但是这会破坏编译时类型检查,因为我正在尝试将特定类型转换为泛型类型.

这是Java中Generics的限制还是这个场景对于使用Generics来说是一个糟糕的局面?

java generics

12
推荐指数
1
解决办法
1035
查看次数

Java通配符与类型参数

为什么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)

java generics

11
推荐指数
1
解决办法
288
查看次数

Hadoop HADOOP_CLASSPATH问题

这个问题并不是指在整个集群中分发罐子以供工人使用它们.

它指的是在客户端计算机上指定许多其他库.更具体一点:我正在尝试运行以下命令以检索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脚本在类路径中自动包含的库)

一些可能有用的信息:

  • 我无法修改hadoop.sh脚本(也没有任何相关的脚本)
  • 我无法将我的库复制到hadoop安装目录下的/ lib目录
  • 在从hadoop.sh运行的hadoop-env.sh中有这一行:export HADOOP_CLASSPATH=$HADOOP_HOME/lib这可能解释了为什么忽略了我的HADOOP_CLASSPATH env var.

hadoop jar classpath

8
推荐指数
1
解决办法
5万
查看次数

对数组进行排序并反映另一个数组中的更改

我在Java中有一系列双打:arr1我想要排序.最可能的第一种选择是实用方法Arrays.sort(double[]).

这个想法是,我想同样的变化(在例如值index i在与值互换index jarr1),以反映在另一个整数数组:arr2(即在相同的索引值也发生变化,在读出arr2).

有没有一种简单的方法(一招)在Java中实现这一目标?或者唯一的方法是自己实现排序算法?

更新:我看到人们建议用一个包含2个值的对象数组替换两个数组(一个来自arr1,一个来自arr2).这不会带来一些效率惩罚.换句话说,排序对象数组的效率是否低于基本类型数组(在这种情况下是双打的)?

数据完全是静态的.它很大(它适合内存)但是静态.

java arrays sorting

7
推荐指数
1
解决办法
6200
查看次数

Hadoop向所有reducer发送记录

如何向所有减速机发送特定记录?

我知道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时为我做了这个.

reduce hadoop partitioning mapreduce partitioner

6
推荐指数
1
解决办法
1575
查看次数

java assertEquals集

我有两套:

 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方法!

有任何想法吗?

java assert set

6
推荐指数
1
解决办法
4946
查看次数

Linux join实用程序抱怨输入文件未被排序

我有两个文件:

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)

linux sorting bash text-processing join

6
推荐指数
2
解决办法
5509
查看次数