У меня есть CSV, в котором поле имеет дату и время в определенном формате. Я не могу импортировать его непосредственно в свой Dataframe, потому что это должна быть метка времени. Так что я импортировать его в виде строки и преобразовать его в Timestamp
как этотЛучший способ преобразования строкового поля в метку времени в Spark
import java.sql.Timestamp
import java.text.SimpleDateFormat
import java.util.Date
import org.apache.spark.sql.Row
def getTimestamp(x:Any) : Timestamp = {
val format = new SimpleDateFormat("MM/dd/yyyy' 'HH:mm:ss")
if (x.toString() == "")
return null
else {
val d = format.parse(x.toString());
val t = new Timestamp(d.getTime());
return t
}
}
def convert(row : Row) : Row = {
val d1 = getTimestamp(row(3))
return Row(row(0),row(1),row(2),d1)
}
Есть лучше, более краткий способ сделать это с API Dataframe или искровым SQL? Вышеупомянутый метод требует создания RDD и снова предоставить схему для Dataframe.
Я сделал это раньше. Я чувствовал, что должен обратиться к основной проблеме, прежде чем переходить к таким тонкостям. Если есть лучшее решение, возможно, не придется делать это вообще. Проблема заключается в строке rows.map, которая возвращает rdd и должна быть преобразована в ddf. Так может быть, что ddf api отсутствует или я не знаю, как это сделать. – user568109
Я не знаю, есть ли другой способ, но вы можете без проблем конвертировать любой RDD в DF. В этом конкретном примере с 'sqlContext.createDataFrame (rowRDD, schema)'. Для меня искра sql приятно запрашивать ваши данные по-подобному SQL-обращению, а не анализировать сами данные (например, использовать простые RDD-файлы). – jarandaf
Попробуйте (новая отметка времени (формат.parse (s) .getTime)). ToOption – nont