Проблема с отметкой времени при загрузке 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"))

0 ответов

Другие вопросы по тегам