python - PySpark 不会转换时间戳

标签 python apache-spark pyspark jupyter-notebook simpledateformat

我有一个非常简单的 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|
+----+-------------------+------+----------+

这是怎么回事?

最佳答案

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

关于python - PySpark 不会转换时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47730265/

相关文章:

python - 在jupyter中打印数据框时没有水平滚动条

python - Pyspark 数据帧 : Transforming unique elements in rows to columns

json - 如何重命名 pyspark 生成的 JSON?

apache-spark - Apache Spark 可以用作数据库替代品吗? (例如替换Mysql)

apache-spark - Spark结构化流: mapPartitions is supported?

Python 在 HTML 中替代 PHP

python - 如何根据通过 Selenium 和 Python 提供的 HTML 定位元素

python - 使用 Marketo API 的结果不一致 - 无法找到事件 ID

java - 将系统属性传递给 spark-submit 并从类路径或自定义路径读取文件

apache-spark - 如何将函数应用于 PySpark DataFrame 指定列的每一行