создать метку времени из столбцов строк месяца и года в PySpark - PullRequest
0 голосов
/ 20 сентября 2019

Я хочу создать столбец отметки времени, чтобы создать линейный график из двух столбцов, содержащих месяц и год соответственно.Df выглядит так: я знаю, что могу создать строку concat и затем преобразовать ее в столбец datetime:

df.select('*', concat('01', df['month'], df['year']).alias('date')).withColumn("date", df['date'].cast(TimestampType()))

Но я хотел более чистый подход с использованием встроенной функциональности PySpark, котораятакже может помочь мне создать другие части даты, такие как номер недели, кварталы и т. д. Есть предложения?

enter image description here

1 Ответ

1 голос
/ 21 сентября 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...