Odi*_*seo 1 python datetime dataframe apache-spark 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|
Run Code Online (Sandbox Code Playgroud)
我想将其转换为日期列。我知道我可以提取前 3 个字母并映射到一个整数,但这似乎不专业。必须有更好的方法来用一两行代码来转换它。这是我想要得到的输出:
df.select("issue_month").show()
+------------+
| issue_month|
+------------+
|12|
|12|
|12|
|12|
|12|
|12|
|12|
|12|
|12|
Run Code Online (Sandbox Code Playgroud)
使用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|
#+-----------+
Run Code Online (Sandbox Code Playgroud)