我看到了(这里:How to convert Timestamp to Date format in 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()
但这在列date_again
中返回null:
+--------+----------+----------+
| date| timestamp|date_again|
+--------+----------+----------+
|20170809|1502229600| null|
|20171007|1507327200| null|
+--------+----------+----------+
你知道什么失败了吗?
8条答案
按热度按时间iq0todco1#
如下:
不起作用,因为它的类型不一致-第一个子句返回
string
,而第二个子句返回bigint
。因此,如果data
是NOT NULL
并且不为空,则它将始终返回NULL
。它也是过时的- SQL函数是
NULL
和格式错误安全的。不需要额外的检查。在Spark 2.2或更高版本中不需要中间步骤:
9nvpjoqh2#
您应该执行以下操作
schema是
zzoitvuj3#
对于pyspark:
在 df 中添加一个新字段,显示 'DateOnly' 列,如下所示:
这将在 df 中显示一个名为 DateOnly 的新列-日期为 yyyymmdd 格式
lvjbypge4#
要将pyspark dataframe(
df
)中的unix_timestamp
列(称为TIMESTMP
)转换为Date
类型:下面是两个步骤(可能有更短的方法):
timestamp
timestamp
转换为Date
最初
df.printShchema()
显示:-- TIMESTMP: long (nullable = true)
使用
spark.SQL
实现转换如下:printSchema()将显示:
最后将
timestamp
的类型转换为Date
,如下所示:t2a7ltrp5#
cgh8pdjw6#
他们关闭了我的question作为这个的副本,所以我将复制并粘贴我的答案在这里(是一个副本,对吗?)
因为timestamp列的单位是毫秒,所以只需要将其转换为秒并将其转换为
TimestampType
,这应该可以做到:41ik7eoe7#
没有
import TimestampType
的选项:bjg7j2ky8#
您可以直接施放场: