Spark Scala-尝试从时间戳提取时间时为Null

峰值状态

我正在尝试使用以下代码从时间戳中提取时间,但它返回的是空值而不是时间。我已经过滤了数据集以获取所需的记录,因此可以忽略来自输入列的AM / PM。

我做了一些阅读,看来date_format在这种情况下应该可以使用

有什么想法吗?

电流输出:

+----------------------+----------------------+---------+------------+------------+
|tpep_pickup_datetime  |tpep_dropoff_datetime |timestamp|total_amount|pickupWindow|
+----------------------+----------------------+---------+------------+------------+
|05/18/2018 09:56:20 PM|05/18/2018 10:50:38 PM|35780    |52.87       |null        |
|05/18/2018 10:52:49 PM|05/18/2018 11:08:47 PM|39169    |14.76       |null        |
|05/18/2018 09:01:22 PM|05/18/2018 09:05:36 PM|32482    |6.3         |null        |
|05/18/2018 09:00:29 PM|05/18/2018 09:05:31 PM|32429    |7.56        |null        |
+----------------------+----------------------+---------+------------+------------+

当前代码:

val taxiSub = spark.read.format("csv").option("header", true).option("inferSchema", true).load("/user/zeppelin/taxi/TaxiSubset.csv") //read Data
taxiSub.createOrReplaceTempView("taxiSub") //Create View
val stamp = taxiSub.withColumn("timestamp", unix_timestamp($"tpep_pickup_datetime", "MM/dd/yyyy hh:mm:ss")) //create timestamp
val h = hour(unix_timestamp($"tpep_pickup_datetime","MM/dd/yyyy hh:mm:ss").cast("timestamp"))
val subset= stamp.withColumn("hour",h).filter("hour BETWEEN 9 AND 10").where($"tpep_pickup_datetime".contains("PM")).filter($"total_amount" < 200.00) //filter records between 9pm and 11pm and < 200 total amount

val myData = subset.withColumn("tmp",to_timestamp(col("tpep_pickup_datetime"),"MM/dd/yyyy HH:mm:ss")).//add new timestamp type field
withColumn("timestamp", unix_timestamp(concat_ws(":",hour(col("tmp")),minute(col("tmp")),second(col("tmp"))),"hh:mm:ss")). //extract hour,minute and convert to epoch timestamp value
drop("tmp").select("tpep_pickup_datetime","tpep_dropoff_datetime","timestamp","total_amount")

val testing = myData.withColumn("pickupWindow",date_format($"tpep_pickup_datetime","hh:mm:ss"))
testing.show(false)

Shu

.dateformat()期望colyyyy-MM-dd [hh|HH]:mm:ss格式的值,但输入数据具有MM / dd / yyyy..etc。

  • 首先,我们需要tpep_pickup_datetime使用to_timestamp函数将其转换为时间戳,然后将其应用于date_format提取hh:mm:ss

Example:

df.show(false)
//+----------------------+
//|tpep_pickup_datetime  |
//+----------------------+
//|05/18/2018 09:56:20 PM|
//|05/18/2018 10:52:49 PM|
//+----------------------+

//to get 24hr format HH value
df.withColumn("pickupWindow",date_format(to_timestamp(col("tpep_pickup_datetime"),"MM/dd/yyyy hh:mm:ss a"),"HH:mm:ss")).
show()

//using from_unixtime,unix_timestamp
df.withColumn("pickupWindow",from_unixtime(unix_timestamp(col("tpep_pickup_datetime"),"MM/dd/yyyy hh:mm:ss a"),"HH:mm:ss")).show()

//+--------------------+------------+
//|tpep_pickup_datetime|pickupWindow|
//+--------------------+------------+
//|05/18/2018 09:56:...|    21:56:20|
//|05/18/2018 10:52:...|    22:52:49|
//+--------------------+------------+

//to get 12hr format hh value
df.withColumn("pickupWindow",date_format(to_timestamp(col("tpep_pickup_datetime"),"MM/dd/yyyy hh:mm:ss a"),"hh:mm:ss")).
show()

//Or using unix_timestamp,from_unixtime
df.withColumn("pickupWindow",from_unixtime(unix_timestamp(col("tpep_pickup_datetime"),"MM/dd/yyyy hh:mm:ss a"),"hh:mm:ss")).show()

//+--------------------+------------+
//|tpep_pickup_datetime|pickupWindow|
//+--------------------+------------+
//|05/18/2018 09:56:...|    09:56:20|
//|05/18/2018 10:52:...|    10:52:49|
//+--------------------+------------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

时间戳转换 Spark Scala

来自分类Dev

Java / Scala中用于Spark-csv的时间戳解析

来自分类Dev

Spark Scala DataFrame时间戳转换排序?

来自分类Dev

在Spark Scala中将CDT时间戳转换为UTC格式

来自分类Dev

Spark Scala从日期开始创建时间戳列

来自分类Dev

Java / Scala中用于Spark-csv的时间戳解析

来自分类Dev

Spark Scala-Spark Dataframe列上的分钟持续时间

来自分类Dev

使用Scala将字符串转换为Spark的时间戳

来自分类Dev

从 Scala/spark 中时间戳的数据帧列中获取最大值

来自分类Dev

Scala,Spark,提取部分字符串

来自分类Dev

如何从MapType Scala Spark列提取数据作为Scala Map?

来自分类常见问题

筛选数据框Spark Scala的日期大于当前时间

来自分类Dev

在Scala / Spark中将纪元转换为日期时间

来自分类Dev

筛选数据框Spark Scala的日期大于当前时间

来自分类Dev

如何在Spark Scala中更改时间格式

来自分类Dev

scala spark count 在 DataFrame 中随时间变化的次数

来自分类Dev

Apache Spark (Scala) 跨时间聚合与不同组

来自分类Dev

使用spark和scala根据总时间为每个ID查找前N个游戏

来自分类Dev

Scala和Spark:createStream时出错

来自分类Dev

运行Scala和Spark时出错

来自分类Dev

如果行与另一个DataFrame中的ID匹配且时间戳低于其他帧时间戳,则如何过滤Scala Spark DataFrame

来自分类Dev

spark rdd时间戳转换

来自分类Dev

按键分组并使用 Spark/Scala 有效地找到在特定时间窗口中发生的事件的前一个时间戳

来自分类Dev

在 Scala 中使用日期时间/时间戳

来自分类Dev

使用Spark读取Elasticsearch记录时的时间戳无效

来自分类Dev

提取嵌套Spark DataFrame中的列作为Scala数组

来自分类Dev

从Scala的Spark数据框中提取Array [T]

来自分类Dev

如何在scala spark rdd中提取CSV文件的列

来自分类Dev

Spark Scala运行

Related 相关文章

  1. 1

    时间戳转换 Spark Scala

  2. 2

    Java / Scala中用于Spark-csv的时间戳解析

  3. 3

    Spark Scala DataFrame时间戳转换排序?

  4. 4

    在Spark Scala中将CDT时间戳转换为UTC格式

  5. 5

    Spark Scala从日期开始创建时间戳列

  6. 6

    Java / Scala中用于Spark-csv的时间戳解析

  7. 7

    Spark Scala-Spark Dataframe列上的分钟持续时间

  8. 8

    使用Scala将字符串转换为Spark的时间戳

  9. 9

    从 Scala/spark 中时间戳的数据帧列中获取最大值

  10. 10

    Scala,Spark,提取部分字符串

  11. 11

    如何从MapType Scala Spark列提取数据作为Scala Map?

  12. 12

    筛选数据框Spark Scala的日期大于当前时间

  13. 13

    在Scala / Spark中将纪元转换为日期时间

  14. 14

    筛选数据框Spark Scala的日期大于当前时间

  15. 15

    如何在Spark Scala中更改时间格式

  16. 16

    scala spark count 在 DataFrame 中随时间变化的次数

  17. 17

    Apache Spark (Scala) 跨时间聚合与不同组

  18. 18

    使用spark和scala根据总时间为每个ID查找前N个游戏

  19. 19

    Scala和Spark:createStream时出错

  20. 20

    运行Scala和Spark时出错

  21. 21

    如果行与另一个DataFrame中的ID匹配且时间戳低于其他帧时间戳,则如何过滤Scala Spark DataFrame

  22. 22

    spark rdd时间戳转换

  23. 23

    按键分组并使用 Spark/Scala 有效地找到在特定时间窗口中发生的事件的前一个时间戳

  24. 24

    在 Scala 中使用日期时间/时间戳

  25. 25

    使用Spark读取Elasticsearch记录时的时间戳无效

  26. 26

    提取嵌套Spark DataFrame中的列作为Scala数组

  27. 27

    从Scala的Spark数据框中提取Array [T]

  28. 28

    如何在scala spark rdd中提取CSV文件的列

  29. 29

    Spark Scala运行

热门标签

归档