RDD到CSV JAVA

时间:2017-01-19 14:51:44

标签: java csv hadoop apache-spark

我正在使用Apache Spark和Apache Kylin,我必须在HDFS中存储一个csv文件,以便能够在Kylin中创建一个立方体。我的想法是将我获得的RDD转换为csv文件,我试图将我的RDD转换为csv文件,如下所示:

bookingDF.write().format("com.databricks.spark.csv").option("header", "true").save("hdfs://10.7.30.131:8020/tmp/hfile/e.csv");

但我总是得到一个很长的错误,我认为这是因为我正在使用的对象的字段Date:

17/01/19 14:50:24 ERROR Utils: Aborting taskscala.MatchError: Fri Dec 09 07:45:27 CET 2016 (of class java.util.Date)
at org.apache.spark.sql.catalyst.CatalystTypeConverters$StructConverter.toCatalystImpl(CatalystTypeConverters.scala:255)
at org.apache.spark.sql.catalyst.CatalystTypeConverters$StructConverter.toCatalystImpl(CatalystTypeConverters.scala:250)
at org.apache.spark.sql.catalyst.CatalystTypeConverters$CatalystTypeConverter.toCatalyst(CatalystTypeConverters.scala:102)...

下面我附上我正在使用的Java对象的代码:

@JsonIgnoreProperties(ignoreUnknown = true)
public class Booking implements Serializable {
private String bPk;
private String type;
private String transactionId;
private Boolean revisit;
private String device;
@JsonProperty("serverTime")
private Date time;
private String trackingId;
private String browserFamily;
@JsonProperty("action")
private String measure;
private String userId;

public String getUserId() {
    return userId;
}

public void setUserId(String userId) {
    this.userId = userId;
}

public String getMeasure() {
    return measure;
}

public void setMeasure(String measure) {
    this.measure = measure;
}

public String getBrowserFamily() {
    return browserFamily;
}

public void setBrowserFamily(String browserFamily) {
    this.browserFamily = browserFamily;
}

public void setTime(Date time) {
    this.time = time;
}

public String getTrackingId() {
    return trackingId;
}

public void setTrackingId(String trackingId) {
    this.trackingId = trackingId;
}

public Date getTime() {
    return time;
}
....

我不确定我做错了什么,我试图将java.util.date转换为java.sql.date但我仍然使用java.sql.date获得相同的错误。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用java.text.SimpleDateFormat吗?

来自spark-csv源代码:

dateFormat:

  

指定一个字符串,指示读取时使用的日期格式   日期或时间戳。
自定义日期格式遵循以下格式   java.text.SimpleDateFormat
这适用于DateType和   TimestampType。
默认情况下,它为null,表示尝试解析   时间和日期java.sql.Timestamp.valueOf()和   java.sql.Date.valueOf()