Pyspark:将列从字符串类型转换为时间戳类型
Pyspark: Convert Column from String Type to Timestamp Type
我一直在使用 pyspark 2.3。我的数据框包含 'TIME' 字符串格式的 DateTime 值列。该列如下所示:
+---------------+
| TIME|
+---------------+
| 2016/04/14 190|
| 2016/04/15 180|
|2016/04/14 1530|
|2016/04/16 1530|
| 2016/04/17 160|
+---------------+
其中 190
或 1530
中的前两位数字代表小时,其余数字代表分钟。
我尝试使用以下行将其转换为时间戳类型:
df.withColumn('TIME_timestamp',fn.unix_timestamp('TIME','yyyy/MM/dd HHMM').cast(TimestampType()))
还有:
df.withColumn('TIME_timestamp', fn.to_timestamp("TIME", 'yyyy/MM/dd HHMM'))
但结果是:
+---------------+-------------------+
| TIME| TIME_timestamp|
+---------------+-------------------+
| 2016/04/14 190| null|
| 2016/04/15 180| null|
|2016/04/14 1530| null|
|2016/04/16 1530| null|
| 2016/04/17 160| null|
+---------------+-------------------+
因此所需的 Dataframe 应如下所示:
+---------------+
| TIME_timestamp|
+---------------+
| 16-04-15 19:00|
| 16-04-15 18:00|
| 16-04-15 15:30|
| 16-04-15 15:30|
| 16-04-15 16:00|
+---------------+
您使用大写 M
来标识月份和分钟;会议记录应以 m
标识,参见 here。下面给出了一个使用 to_timestamp
的工作示例,希望对您有所帮助!
import pyspark.sql.functions as F
df = sqlContext.createDataFrame(
[
('2016/04/14 190',),
('2016/04/15 180',),
('2016/04/14 1530',),
('2016/04/16 1530',),
('2016/04/17 160',)
],
("TIME",)
)
df.withColumn('TIME_timestamp',F.to_timestamp("TIME", "yyyy/MM/dd HHmm")).show()
输出:
+---------------+-------------------+
| TIME| TIME_timestamp|
+---------------+-------------------+
| 2016/04/14 190|2016-04-14 19:00:00|
| 2016/04/15 180|2016-04-15 18:00:00|
|2016/04/14 1530|2016-04-14 15:30:00|
|2016/04/16 1530|2016-04-16 15:30:00|
| 2016/04/17 160|2016-04-17 16:00:00|
+---------------+-------------------+
我一直在使用 pyspark 2.3。我的数据框包含 'TIME' 字符串格式的 DateTime 值列。该列如下所示:
+---------------+
| TIME|
+---------------+
| 2016/04/14 190|
| 2016/04/15 180|
|2016/04/14 1530|
|2016/04/16 1530|
| 2016/04/17 160|
+---------------+
其中 190
或 1530
中的前两位数字代表小时,其余数字代表分钟。
我尝试使用以下行将其转换为时间戳类型:
df.withColumn('TIME_timestamp',fn.unix_timestamp('TIME','yyyy/MM/dd HHMM').cast(TimestampType()))
还有:
df.withColumn('TIME_timestamp', fn.to_timestamp("TIME", 'yyyy/MM/dd HHMM'))
但结果是:
+---------------+-------------------+
| TIME| TIME_timestamp|
+---------------+-------------------+
| 2016/04/14 190| null|
| 2016/04/15 180| null|
|2016/04/14 1530| null|
|2016/04/16 1530| null|
| 2016/04/17 160| null|
+---------------+-------------------+
因此所需的 Dataframe 应如下所示:
+---------------+
| TIME_timestamp|
+---------------+
| 16-04-15 19:00|
| 16-04-15 18:00|
| 16-04-15 15:30|
| 16-04-15 15:30|
| 16-04-15 16:00|
+---------------+
您使用大写 M
来标识月份和分钟;会议记录应以 m
标识,参见 here。下面给出了一个使用 to_timestamp
的工作示例,希望对您有所帮助!
import pyspark.sql.functions as F
df = sqlContext.createDataFrame(
[
('2016/04/14 190',),
('2016/04/15 180',),
('2016/04/14 1530',),
('2016/04/16 1530',),
('2016/04/17 160',)
],
("TIME",)
)
df.withColumn('TIME_timestamp',F.to_timestamp("TIME", "yyyy/MM/dd HHmm")).show()
输出:
+---------------+-------------------+
| TIME| TIME_timestamp|
+---------------+-------------------+
| 2016/04/14 190|2016-04-14 19:00:00|
| 2016/04/15 180|2016-04-15 18:00:00|
|2016/04/14 1530|2016-04-14 15:30:00|
|2016/04/16 1530|2016-04-16 15:30:00|
| 2016/04/17 160|2016-04-17 16:00:00|
+---------------+-------------------+