3

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

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

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

对于 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"))
4

0 回答 0