Java Spark数据帧写入JDBC-Can';t获取结构的JDBC类型<;日期:int,日期:int.>;?

Java Spark数据帧写入JDBC-Can';t获取结构的JDBC类型<;日期:int,日期:int.>;?,java,apache-spark,exception,jdbc,apache-spark-sql,Java,Apache Spark,Exception,Jdbc,Apache Spark Sql,我是spark的新手,当时正试图将数据帧写入db2表。我得到的错误是: Exception in thread "main" java.lang.IllegalArgumentException: Can't get JDBC type for struct <data:int, day:int, hours:int, minutes:int, month:int, seconds:int, time:bigint, timeZoneOffset:int, year:int> 然后

我是spark的新手,当时正试图将数据帧写入db2表。我得到的错误是:

Exception in thread "main" java.lang.IllegalArgumentException: Can't get JDBC type for struct <data:int, day:int, hours:int, minutes:int, month:int, seconds:int, time:bigint, timeZoneOffset:int, year:int>
然后我基本上读取了一个csv,它与db表具有相同的模式,如下所示:

JavaRDD<String> dataFromCSV = javaSparkContext.textFile(fileURL);
//The I create a JavaRDD of the POJO type
JavaRDD<StowageTable> dataToPOJO = dataFromCSV.map((Function<String,  StowageTable) line -> {
    String[] fields = line.split(",");
    StowageTable st = createNewStowageTable(fields);
    return st;
});
//converting the RDD to DataFrame
DataFrame stowageTableDF = sqlContext.createDataFrame(dataToPOJO, StowageTable.class);
//call jdbc persister
persistToTable(stowageTableDF);
private void persistToTable(DataFrame df) {
    Class.forName("")//driver here
    //skipping a few lines for brevity
    df.write().mode(SaveMode.Append).jdbc(url, table, connectionProperties);
}
我在这里找到了一些解决方案: 及
但是找不到任何解决日期时间数据类型问题的方法。请给我建议一些解决办法。我使用的是spark 1.6.3。

因为我还没有找到任何答案,同时为自己找到了一个解决方案,所以这里是基本的想法。如果数据库的数据类型是Timestamp,那么您必须在对象的POJO中使用Timestamp,然后将该时间戳转换为spark的structtype。

它说无法为
struct
获取JDBC类型。您可以执行
df.printSchema()
并查看列是否正确映射吗?您也可以使用java.sql.Date
JavaRDD<String> dataFromCSV = javaSparkContext.textFile(fileURL);
//The I create a JavaRDD of the POJO type
JavaRDD<StowageTable> dataToPOJO = dataFromCSV.map((Function<String,  StowageTable) line -> {
    String[] fields = line.split(",");
    StowageTable st = createNewStowageTable(fields);
    return st;
});
//converting the RDD to DataFrame
DataFrame stowageTableDF = sqlContext.createDataFrame(dataToPOJO, StowageTable.class);
//call jdbc persister
persistToTable(stowageTableDF);
private void persistToTable(DataFrame df) {
    Class.forName("")//driver here
    //skipping a few lines for brevity
    df.write().mode(SaveMode.Append).jdbc(url, table, connectionProperties);
}