将CSV加载到数据帧时出现时间戳问题

时间:2015-04-13 06:35:47

标签: scala apache-spark ddf

我正在尝试将csv文件加载到分布式数据帧(ddf)中,同时提供架构。 ddf已加载,但timestamp列仅显示空值。我相信这是因为spark需要特定格式的时间戳。所以我有两个问题:

1)我如何给格式化火花或使其检测格式(如     "MM/dd/yyyy' 'HH:mm:ss"

2)如果1不是一个选项,如何将字段(假设我作为String导入)转换为时间戳。

对于Q2,我尝试过使用以下内容:

def convert(row :org.apache.spark.sql.Row) :org.apache.spark.sql.Row = {
    import org.apache.spark.sql.Row
    val format = new java.text.SimpleDateFormat("MM/dd/yyyy' 'HH:mm:ss")
    val d1 = getTimestamp(row(3))
    return Row(row(0),row(1),row(2),d1);
}

val rdd1 = df.map(convert)
val df1 = sqlContext.createDataFrame(rdd1,schema1)

最后一步不起作用,因为有空值不允许它完成。我得到的错误如下:

java.lang.RuntimeException: Failed to check null bit for primitive long value.

然而,sqlContext.load能够毫无问题地加载csv。

val df = sqlContext.load("com.databricks.spark.csv", schema, Map("path" -> "/path/to/file.csv", "header" -> "true"))

0 个答案:

没有答案