【问题标题】:pyspark convert dataframe column from timestamp to string of "YYYY-MM-DD" formatpyspark 将数据帧列从时间戳转换为“YYYY-MM-DD”格式的字符串
【发布时间】:2018-02-21 16:13:20
【问题描述】:

在 pyspark 中有没有办法将时间戳数据类型的数据帧列转换为格式为 'YYYY-MM-DD' 格式的字符串?

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    你可以使用date_format函数如下

    from pyspark.sql.functions import date_format
    
    df.withColumn("dateColumn",  date_format(col("vacationdate"), "yyyy-MM-dd"))
    

    希望这会有所帮助!

    【讨论】:

    • 仅供参考,您可以根据需要调整日期格式。我只需要月份和年份,yyyy-MM 也是如此。似乎工作正常
    【解决方案2】:
    from pyspark.sql.functions  import date_format
    
    df.withColumn("DateOnly", date_format('DateTime', "yyyy-MM-dd")).show()
    

    【讨论】:

    【解决方案3】:

    如果您有一列以schema

    root
     |-- date: timestamp (nullable = true)
    

    然后你可以使用from_unixtime函数在将timestamp转换为bigInt之后将timestamp转换为string > 使用unix_timestamp 函数作为

    from pyspark.sql import functions as f
    df.withColumn("date", f.from_unixtime(f.unix_timestamp(df.date), "yyyy-MM-dd"))
    

    你应该有

    root
     |-- date: string (nullable = true)
    

    【讨论】:

    • 嗨 Ramesh,通常时间戳的格式为 2012-01-01 00:00:00。我们可以将其格式化为 Jan-2012,同时将其模式保持为 date: timestamp 吗?如果我们使用 date_format(),我们会得到一个字符串。我们应该使用哪个函数将时间戳格式化为我们想要的格式,同时仍将其保留为时间戳而不是无意中将其转换为日期:字符串?
    • 迟到了,但你可以使用下面的代码将任何字符串转换为时间戳。 #udf to change the datatype to timestamp change_to_timestamp_fmt = udf(lambda x: datetime.strptime(x,'%d-%b-%Y %H:%M:%S'), TimestampType())
    • @anidev711 pyspark 中的 UDF 通常比原生 spark (scala/java) 函数慢 10 到 10000 倍,原因很明显。
    【解决方案4】:

    另一个尝试的选择是

    从 pyspark.sql 导入函数为 F

    df = df.withColumn('new_time_column', F.to_timestamp(df['Time_column'], 'yyyy-MM-dd'))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多