【问题标题】:PySpark won't convert timestampPySpark 不会转换时间戳
【发布时间】:2017-12-09 15:47:25
【问题描述】:

我有一个非常简单的 CSV,叫它test.csv

name,timestamp,action
A,2012-10-12 00:30:00.0000000,1
B,2012-10-12 01:00:00.0000000,2 
C,2012-10-12 01:30:00.0000000,2 
D,2012-10-12 02:00:00.0000000,3 
E,2012-10-12 02:30:00.0000000,1

我正在尝试使用 pyspark 读取它并添加一个指示月份的新列。

首先我读入数据,一切正常。

df = spark.read.csv('test.csv', inferSchema=True, header=True)
df.printSchema()
df.show()

输出:

root
 |-- name: string (nullable = true)
 |-- timestamp: timestamp (nullable = true)
 |-- action: double (nullable = true)

+----+-------------------+------+
|name|          timestamp|action|
+----+-------------------+------+
|   A|2012-10-12 00:30:00|   1.0|
|   B|2012-10-12 01:00:00|   2.0|
|   C|2012-10-12 01:30:00|   2.0|
|   D|2012-10-12 02:00:00|   3.0|
|   E|2012-10-12 02:30:00|   1.0|
+----+-------------------+------+

但是当我尝试添加我的列时,格式化选项似乎没有任何作用。

df.withColumn('month', to_date(col('timestamp'), format='MMM')).show()

输出:

+----+-------------------+------+----------+
|name|          timestamp|action|     month|
+----+-------------------+------+----------+
|   A|2012-10-12 00:30:00|   1.0|2012-10-12|
|   B|2012-10-12 01:00:00|   2.0|2012-10-12|
|   C|2012-10-12 01:30:00|   2.0|2012-10-12|
|   D|2012-10-12 02:00:00|   3.0|2012-10-12|
|   E|2012-10-12 02:30:00|   1.0|2012-10-12|
+----+-------------------+------+----------+

这是怎么回事?

【问题讨论】:

  • 你想把它转换成什么?月?
  • 是的。根据 Oracle 页面上的文档,MMM 应该可以做到这一点,但我没有尝试过任何格式。 docs.oracle.com/javase/tutorial/i18n/format/…
  • @RameshMaharjan 这很有用,我不知道有这样的功能!但是,您会明白这是一个简化的示例,我仍然希望自定义格式正常工作,或者了解它为什么不起作用。
  • 您正在做的是基于列的转换,并且上面的链接中还有 to_date 函数,它不采用格式参数。因此它不适合你。我猜你正在寻找的是 udf 函数。

标签: python apache-spark pyspark jupyter-notebook simpledateformat


【解决方案1】:

to_dateformat 用于解析字符串类型列。你需要的是date_format

from pyspark.sql.functions import date_format

df.withColumn('month', date_format(col('timestamp'), format='MMM')).show()

# +----+-------------------+------+-----+
# |name|          timestamp|action|month|
# +----+-------------------+------+-----+
# |   A|2012-10-12 00:30:00|   1.0|  Oct|
# |   B|2012-10-12 01:00:00|   2.0|  Oct|
# |   C|2012-10-12 01:30:00|   2.0|  Oct|
# |   D|2012-10-12 02:00:00|   3.0|  Oct|
# |   E|2012-10-12 02:30:00|   1.0|  Oct|
# +----+-------------------+------+-----+

【讨论】:

    猜你喜欢
    • 2019-06-17
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2021-11-17
    • 2018-10-03
    • 2021-12-11
    相关资源
    最近更新 更多