看到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,这是一个无赖。 关于如何弥合这一点的任何想法?