python - 使用月-年格式将 PySpark 字符串转换为日期
问题描述
我有一个 PySpark 数据框,其日期列编码为具有以下格式的字符串:
df.select("issue_d").show()
+--------+
| issue_d|
+--------+
|Dec-2015|
|Dec-2015|
|Dec-2015|
|Dec-2015|
|Dec-2015|
|Dec-2015|
|Dec-2015|
|Dec-2015|
|Dec-2015|
我想将其转换为日期列。我知道我可以提取前 3 个字母并映射到一个整数,但这似乎不专业。必须有更好的方法用一/两行代码来转换它。这是我想得到的输出:
df.select("issue_month").show()
+------------+
| issue_month|
+------------+
|12|
|12|
|12|
|12|
|12|
|12|
|12|
|12|
|12|
解决方案
使用from_unixtime + unix_timestamp
函数将month(MMM)
格式转换为'MM'
.
Example:
#sample data
df1.show()
#+--------+
#| issue_d|
#+--------+
#|Dec-2015|
#|Jun-2015|
#+--------+
df1.selectExpr("from_unixtime(unix_timestamp(issue_d,'MMM-yyyy'),'MM') as issue_month").show()
+-----------+
|issue_month|
+-----------+
| 12|
| 06|
+-----------+
#or add as new column
df1.withColumn("issue_month",from_unixtime(unix_timestamp(col("issue_d"),'MMM-yyyy'),'MM')).show()
#+--------+-----------+
#| issue_d|issue_month|
#+--------+-----------+
#|Dec-2015| 12|
#|Jun-2015| 06|
#+--------+-----------+
#overwrite existing column
df1.withColumn("issue_d",from_unixtime(unix_timestamp(col("issue_d"),'MMM-yyyy'),'MM')).show()
+-------+
|issue_d|
+-------+
| 12|
| 06|
+-------+
#overwrite the exisitng df1 with new column
df1=df1.withColumn("issue_month",from_unixtime(unix_timestamp(col("issue_d"),'MMM-yyyy'),'MM')).select("issue_month")
df1.show()
#+-----------+
#|issue_month|
#+-----------+
#| 12|
#| 06|
#+-----------+
推荐阅读
- postgresql - 从 Postgresql 中删除 bytea 数据
- docker - 错误:准备失败:来自守护程序的错误响应:在此服务器上找不到请求的 URL /v1.25/info
- sql-server - azure 数据工厂上的存储过程失败并显示错误消息:执行输出的长度超出限制(目前约为 1M)
- c# - 使用 Ocelot 的服务发现 ASP.Net Core
- database - 将数据类型更新为 mongoDB 中的对象
- python - 在访问列时,我在 numpy 中得到了行
- android - 是否可以使用 android 应用程序更改移动设备的 API 级别并测试我们的应用程序?
- python - python没有文件或目录错误删除入口点(setup.py)
- ios - 调用 Firebase swift 中的额外参数“数据”
- c# - 如何为 Enum 设置一些虚拟值?