我见过(这里:如何在dataframe中将时间戳转换为日期格式?)在datetype中转换时间戳的方法,但是,至少对我来说,它不起作用。
以下是我尝试过的:
# Create dataframe
df_test = spark.createDataFrame([('20170809',), ('20171007',)], ['date',])
# Convert to timestamp
df_test2 = df_test.withColumn('timestamp',func.when((df_test.date.isNull() | (df_test.date == '')) , '0')\
.otherwise(func.unix_timestamp(df_test.date,'yyyyMMdd')))\
# Convert timestamp to date again
df_test2.withColumn('date_again', df_test2['timestamp'].cast(stypes.DateType())).show()
但这在列中返回null date_again
:
+--------+----------+----------+
| date| timestamp|date_again|
+--------+----------+----------+
|20170809|1502229600| null|
|20171007|1507327200| null|
+--------+----------+----------+
知道什么失败了吗?
7条答案
按热度按时间hwamh0ep1#
以下内容:
不起作用,因为它的类型不一致-第一个子句返回
string
当第二个子句返回时bigint
. 结果它总是会回来NULL
如果data
是NOT NULL
不是空的。它也是过时的-sql函数
NULL
格式错误的文件。不需要额外的检查。在spark 2.2或更高版本中不需要中间步骤:
hmtdttj42#
你应该做以下工作
模式是
b4qexyjb3#
对于Pypark:
假设您有一个字段名:“datetime”,它将日期显示为日期和时间
向df添加一个新字段,该字段显示“dateonly”列,如下所示:
这将在df中显示一个名为dateonly的新列,日期为yyyymmdd格式
xurqigkl4#
转换
unix_timestamp
列(称为TIMESTMP
)在PyparkDataframe中(df
)--到Date
类型:以下是两步流程(可能有一个较短的方法):
从unix时间戳转换为
timestamp
转换自timestamp
至Date
最初df.printShchema()
显示:-- TIMESTMP: long (nullable = true)
使用spark.SQL
实现如下转换:printschema()将显示:
最后将类型从
timestamp
至Date
具体如下:dzhpxtsq5#
whhtz7ly6#
他们把我的问题作为这个问题的副本关闭了,所以我会把我的答案复制粘贴到这里(是副本吗?)
因为timestamp列是以毫秒为单位的,所以只需将其转换为秒并将其转换为
TimestampType
这样就可以了:k5ifujac7#
一个没有
import TimestampType
: