pyspark - 从 PySpark 中的月份和年份字符串列创建时间戳
问题描述
我想创建一个时间戳列,从分别包含月份和年份的两列创建折线图。df 看起来像这样:我知道我可以创建一个字符串 concat,然后将其转换为 datetime 列:
df.select('*',
concat('01', df['month'],
df['year']).alias('date')).withColumn("date",
df['date'].cast(TimestampType()))
但我想要一种使用内置 PySpark 功能的更简洁的方法,它还可以帮助我创建其他日期部分,如周数、季度等。有什么建议吗?
解决方案
您必须将字符串连接一次,制作timestamp
类型列,然后您可以轻松提取week
等quarter
。
您可以使用此功能(并对其进行编辑以创建您需要的任何其他列):
def spark_date_parsing(df, date_column, date_format):
"""
Parses the date column given the date format in a spark dataframe
NOTE: This is a Pyspark implementation
Parameters
----------
:param df: Spark dataframe having a date column
:param date_column: Name of the date column
:param date_format: Simple Date Format (Java-style) of the dates in the date column
Returns
-------
:return: A spark dataframe with a parsed date column
"""
df = df.withColumn(date_column, F.to_timestamp(F.col(date_column), date_format))
# Spark returns 'null' if the parsing fails, so first check the count of null values
# If parse_fail_count = 0, return parsed column else raise error
parse_fail_count = df.select(
([F.count(F.when(F.col(date_column).isNull(), date_column))])
).collect()[0][0]
if parse_fail_count == 0:
return df
else:
raise ValueError(
f"Incorrect date format '{date_format}' for date column '{date_column}'"
)
用法(无论您的结果日期格式是什么):
df = spark_date_parsing(df, "date", "dd/MM/yyyy")
推荐阅读
- node.js - 从 Lambda 中的 NodeJS 流中提取数据时遇到问题
- d3.js - d3.js 难度渲染条形图代码取自 bl.ocks 示例
- python - 如何在安装中包含 Python 2.x 二进制文件
- linux - 用于重新启动 apache 服务器的 Cron 脚本不起作用
- android - 在我的虚拟设备上运行我的颤振应用程序
- python - 按照列表中值的顺序过滤已排序的 NumPy 数组的行
- c# - 将未知参数添加到泛型方法内的 Func
- reactjs - mapDispachToProps 在触发事件 onChange 函数时出错
- javascript - Child.html:28 错误类型错误:无法读取未定义的属性“推送”
- javascript - 受控组件与 FormData 接口