Проблема с отметкой времени при загрузке CSV в фрейм данных
Я пытаюсь загрузить CSV-файл в распределенный фрейм данных (ddf), предоставляя схему. Файл ddf загружается, но в столбце отметки времени отображаются только нулевые значения. Я считаю, что это происходит, потому что спарк ожидает метку времени в определенном формате. Итак, у меня есть два вопроса:
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"))