Gop*_*ala 2 python apache-spark apache-spark-sql pyspark pyspark-sql
我的数据看起来像这样:
{"id":1,"createdAt":"2016-07-01T16:37:41-0400"}
{"id":2,"createdAt":"2016-07-01T16:37:41-0700"}
{"id":3,"createdAt":"2016-07-01T16:37:41-0400"}
{"id":4,"createdAt":"2016-07-01T16:37:41-0700"}
{"id":5,"createdAt":"2016-07-06T09:48Z"}
{"id":6,"createdAt":"2016-07-06T09:48Z"}
{"id":7,"createdAt":"2016-07-06T09:48Z"}
我createdAt按如下方式将字段转换为时间戳.
from pyspark.sql import SQLContext
from pyspark.sql.functions import *
sqlContext = SQLContext(sc)
df = sqlContext.read.json('data/test.json')
dfProcessed = df.withColumn('createdAt', df.createdAt.cast('timestamp'))
dfProcessed.printSchema()
dfProcessed.collect()
我得到的输出如下.我得到无值createdAt.如何将字段作为正确的时间戳检索?
root
 |-- createdAt: timestamp (nullable = true)
 |-- id: long (nullable = true)
[Row(createdAt=None, id=1),
 Row(createdAt=None, id=2),
 Row(createdAt=None, id=3),
 Row(createdAt=None, id=4),
 Row(createdAt=None, id=5),
 Row(createdAt=None, id=6),
 Row(createdAt=None, id=7)]
小智 6
为了简单地将字符串列强制转换为时间戳,必须正确格式化字符串列.
要将"createdAt"列检索为时间戳,可以编写将转换字符串的UDF函数
"2016-07-01T16:37:41-0400"
至
"2016-07-01 16:37:41"
并将"createdAt"列转换为新格式(不要忘记处理时区字段).
一旦你有一个包含时间戳的列作为字符串,如"2016-07-01 16:37:41",一个简单的转换为时间戳将完成这项工作,就像你在代码中一样.
您可以在此处阅读有关Spark中日期/时间/字符串处理的更多信息.
| 归档时间: | 
 | 
| 查看次数: | 3588 次 | 
| 最近记录: |