【问题标题】:Convert PySpark String to Date with Month-Year Format使用月-年格式将 PySpark 字符串转换为日期
【发布时间】:2020-06-24 01:23:38
【问题描述】:

我有一个 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|

【问题讨论】:

    标签: python dataframe apache-spark datetime pyspark


    【解决方案1】:

    使用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|
    #+-----------+
    

    【讨论】:

    • 这真的很好,我们可以修改它以便将列添加到现有的 df 中吗?在熊猫中,它是 df['new_col'] = pd.to_datetime(df['old_col'])
    • 太棒了,干得好!
    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 2016-10-31
    • 1970-01-01
    • 2021-08-14
    • 2021-07-04
    • 1970-01-01
    • 2021-04-12
    • 2011-05-11
    相关资源
    最近更新 更多