【发布时间】:2015-09-28 07:15:23
【问题描述】:
我尝试读取除了字符串和整数之外还包含日期值的平面文件 (csv)。 因此,除了对 Date 字段使用 long/String 之外,还可以很好地获取包含 Date 值的对象。
我的代码如下:
JavaRDD<Date> dates = sc.textFile("hdfs://0.0.0.0:19000/Dates.csv").map(
new Function<String, Date>(){
@Override
public Date call(String line){
String[] fields = line.split(",");
return Date.valueOf(fields[2]);
}
});
DataFrame schemaTransactions = sqlContext.createDataFrame(dates, Date.class);
schemaTransactions.registerTempTable("dates");
DataFrame dAs = sqlContext.sql("SELECT * FROM dates");
Row[] dARows = dAs.collect();
代码可以编译,但执行时出现错误消息
Exception in thread "main" java.lang.ClassCastException: org.apache.spark.sql.types.DateType$ cannot be cast to org.apache.spark.sql.types.StructType
被抛出这令人困惑,因为文档sais java.sql.Date to be supported https://spark.apache.org/docs/latest/sql-programming-guide.html
当我使用 sql.Timestamp 时出现同样的错误。
不过,我最初的目标是使用 Java8 中的 LocalDateTime,但由于不支持此功能,我尝试使用 sql.Date。
有什么建议还是有问题?
【问题讨论】:
标签: java apache-spark apache-spark-sql