2017-01-19 60 views
1

我正在使用Apache Spark和Apache Kylin,我必須在HDFS中存儲csv文件才能夠使用它創建Kylin中的多維數據集。我們的想法是一個RDD我得到轉換成csv文件,我是想我RDD轉化成CSV文件是這樣的:RDD到CSV JAVA

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

,但我總是得到一個錯誤相當長的像這樣的,我覺得那是因爲我使用的對象領域日期:

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; 
} 
.... 

我不知道是什麼我做錯了,我試圖轉移orm java.util.date到java.sql.date,但我仍然獲得相同的錯誤,但與java.sql.date。

+0

雖然我要問明顯的問題,日期對象類型是否需要? – EngineerExtraordinaire

+0

我意識到它不接受java.date.util,因此我使用時間戳,現在它正在工作。你能解釋你是怎麼知道的嗎?我的意思是因爲線路錯誤?我在學習,因此我無法看到它需要哪個日期對象類型。 – Orbar

+0

是的,我知道從行錯誤。它說它不匹配,這意味着它尋找特定的東西。 – EngineerExtraordinaire

回答

1

你可以試試使用java.text.SimpleDateFormat

spark-csv源代碼:

DATEFORMAT:

指定的字符串讀 日期或時間戳時,指示使用的日期格式。
自定義日期格式遵循格式 java.text.SimpleDateFormat
這適用於DateType和 TimestampType。
默認情況下,它是空的,這意味着嘗試解析 時間和日期java.sql.Timestamp.valueOf()java.sql.Date.valueOf()

+0

謝謝@Yaron,我不知道它不接受java.date.util,我正在研究你的答案的方向,我使用時間戳,現在它工作。現在我正在獲取其他錯誤,但與我認爲hdfs節點。我會寫在其他郵政,我正在學習因此總是任何幫助的實驗同事歡迎:) – Orbar