我有一個CSV字段,其中字段是特定格式的日期時間。我不能直接在我的Dataframe中導入它,因爲它需要是一個時間戳。所以我將其導入爲字符串,並將其轉換成Timestamp
這樣在Spark中將字符串字段轉換爲時間戳的更好方法
import java.sql.Timestamp
import java.text.SimpleDateFormat
import java.util.Date
import org.apache.spark.sql.Row
def getTimestamp(x:Any) : Timestamp = {
val format = new SimpleDateFormat("MM/dd/yyyy' 'HH:mm:ss")
if (x.toString() == "")
return null
else {
val d = format.parse(x.toString());
val t = new Timestamp(d.getTime());
return t
}
}
def convert(row : Row) : Row = {
val d1 = getTimestamp(row(3))
return Row(row(0),row(1),row(2),d1)
}
是否還有更好的,更簡潔的方式來做到這一點,與數據幀API或火花-SQL?上述方法需要創建RDD並再次爲Dataframe提供模式。
我以前做過這個。我感覺我應該解決核心問題,然後再轉向這種細微之處。如果有更好的解決方案,可能不必這樣做。問題是關於rows.map,它返回rdd並需要轉換爲ddf。所以可能是ddf API缺乏,或者我不知道如何去做。 – user568109
我不知道是否有其他方法,但是您可以將任何RDD轉換爲DF,而不會出現任何問題。在'sqlContext.createDataFrame(rowRDD,schema)'的具體例子中。對我來說,sql很好地以類似SQL的方式查詢數據,而不是解析數據本身(對於這樣的事情,使用簡單的RDD)。 – jarandaf
嘗試(新時間戳(format.parse(s).getTime))。toOption – nont