SparkSQL不支持java.util.Date

时间:2015-04-19 14:14:10

标签: java cassandra-2.0 apache-spark-sql

看到this post,这意味着它已在spark 1.2.0中修复。然而bug谈论java.sql.Date。

无论如何,它不适合我,我得到:

Exception in thread "main" scala.MatchError: class java.util.Date (of class java.lang.Class)

这是一个代码示例:

public class DateSparkSQLExample {

public static void main(String[] args) {
    SparkConf conf = new SparkConf().setAppName("test").setMaster("local");
    JavaSparkContext sc = new JavaSparkContext(conf);

    List<SomeObject> itemsList = Lists.newArrayListWithCapacity(1);
    itemsList.add(new SomeObject(new Date(), 1L));
    JavaRDD<SomeObject> someObjectJavaRDD = sc.parallelize(itemsList);

    JavaSQLContext sqlContext = new org.apache.spark.sql.api.java.JavaSQLContext(sc);
    sqlContext.applySchema(someObjectJavaRDD, SomeObject.class).registerTempTable("temp_table");
}

private static class SomeObject implements Serializable{
    private Date timestamp;
    private Long value;

    public SomeObject() {
    }

    public SomeObject(Date timestamp, Long value) {
        this.timestamp = timestamp;
        this.value = value;
    }

    public Date getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(Date timestamp) {
        this.timestamp = timestamp;
    }

    public Long getValue() {
        return value;
    }

    public void setValue(Long value) {
        this.value = value;
    }
}

}

谢谢, 利奥尔

编辑1:

也许我急于发布这个,因为SparkSQL明确指出Date的类型是java.sql.Date。 但是,我想将相同的bean用于从Cassandra加载的RDD,而不是注册到SparkSQL。因为在我的C *模型中数据类型是时间戳(映射到java.util.Date),我真的不能这样做。 在我看来,使用相同模型的唯一选择是将C *类型从timestamp更改为bigint,这是一个无赖。 关于如何弥合这一点的任何想法?

0 个答案:

没有答案