Вам нужно будет конкатенировать строку один раз, создать столбец типа 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")