pyspark, сбой udf при разборе значения метки времени - PullRequest
0 голосов
/ 24 января 2020

У меня есть фрейм данных, который я прочитал из паркета со значением, подобным этому

+-----------------------+
|date_col               |
+-----------------------+
|20000-01-03 00:00:000.0|
+-----------------------+

root
 |-- date_col: timestamp (nullable = true)

Я пытаюсь отфильтровать неправильно отформатированные даты в отдельный фрейм данных, поэтому я запускаю его через эту функцию

def time_column_validation(df, col_name, df_err):
    date_verification_udf = udf(date_verification, BooleanType())
    df1 = df.filter(df[col_name].isNotNull()).filter(date_verification_udf(df[col_name]))
    df2 = df1.withColumn('Error_desc', lit('Not date type'))
    df_err = df2.union(df_err)

    return df_err


def date_verification(date_col):
    try:
        if isinstance(date_col, datetime.datetime):
            return False
        else:
            parse(date_col)
            return False
    except:
        return True


err_df = time_column_validation(df, 'date_col', err_df)
err_df.show()

df - это мое datafame, показанное выше, err_df - это просто пустой фрейм данных с той же схемой. как это

+--------+
|date_col|
+--------+
+--------+

, но это не сработает в err_df.show (). Я думаю, что соответствующая ошибка заключается в следующем:

 File "C:\spark-2.4.4-bin-hadoop2.7\python\lib\pyspark.zip\pyspark\sql\types.py", line 199, in fromInternal
    return datetime.datetime.fromtimestamp(ts // 1000000).replace(microsecond=ts % 1000000)
OSError: [Errno 22] Invalid argument

Каким-то образом она не может обработать эту дату, но я не уверен, где это происходит или почему, дата существует в файле паркета, а исходный кадр данных просто хорошо. Ищите объяснение и / или предложение о том, как обрабатывать такое значение.

Мне все равно, будет ли эта конкретная дата отфильтрована или нет, я просто не хочу, чтобы код обрабатывал sh .

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