spark scala 数据帧时间戳转换排序?

spark scala dataframe timestamp conversion sorting?

我有一个 csv 格式:

t,value
2012-01-12 12:30:00,4
2012-01-12 12:45:00,3
2012-01-12 12:00:00,12
2012-01-12 12:15:00,13
2012-01-12 13:00:00,7

我使用 spark-csv 将其转换为数据帧。 (所以 tString 类型, value 是 Integer 类型)。什么是合适的 spark scala 方式以便输出按时间排序?

我正在考虑将 t 转换为允许数据帧 sortBy 的特定类型。但是我不熟悉哪种时间戳类型允许数据帧按时间排序。

鉴于格式,您可以将时间戳转换为

import org.apache.spark.sql.types.TimestampType

df.select($"t".cast(TimestampType)) // or df.select($"t".cast("timestamp"))

获取正确的日期时间或使用 unix_timestamp(Spark 1.5+,在 Spark < 1.5 中,您可以使用同名的 Hive UDF)函数:

import org.apache.spark.sql.functions.unix_timestamp

df.select(unix_timestamp($"t"))

获取数字表示(Unix 时间戳 )。

附带说明一下,您没有理由不能直接 orderBy($"t")。字典顺序应该在这里工作得很好。

除了@zero323,如果你写的是纯SQL你可以使用CAST运算符如下:

df.registerTempTable("myTable")    
sqlContext.sql("SELECT CAST(t as timestamp) FROM myTable")

如果您使用 'df.select' 进行转换,那么您可能只会获得指定的列。 要更改指定列的类型并保留其他列,请应用 'df.withColumn' 并传递原始列名。

import org.apache.spark.sql.types._

val df1 = df.withColumn("t",col("t").cast(TimestampType))

df1.printSchema
root
 |-- t: timestamp (nullable = true)
 |-- value: integer (nullable = true)

仅更改了列名 "t" 的数据类型。 其余部分保留。