我正在尝试将 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"))