Проверить формат даты в столбце фрейма данных в pyspark - PullRequest
0 голосов
/ 07 мая 2020

У меня есть фрейм данных со столбцом как Date вместе с несколькими другими столбцами.

Я хотел проверить значение столбца Date и проверить, имеет ли формат «dd / MM / yyyy». Если столбец Date имеет любой другой формат, он должен быть помечен как плохая запись. Поэтому я использую опцию option («dateFormat», «dd / MM / yyyy») , чтобы принять дату в указанном формате, и она принимает дату правильно в формате «dd / MM / yyyy», но если я передать недопустимый формат (ГГГГ / мм / дд), но запись не помечается как недопустимая, а переданная дата конвертируется в мусор

Входной файл:

colData1,2020/05/07,colData2,colData3
colData4,2020/05/07,colData5,colData6
colData7,2020/05/07,colData8,colData9
    df = spark.read.format(
        "com.databricks.spark.csv").schema(customSchema).option(
        "escape", '\"').option(
        "quote", '\"').option(
        "header", "false").option(
        "dateFormat", "dd/MM/yyyy").option(
        "columnNameOfCorruptRecord","badRecords").csv(
        rdd)

    df.show()

DataFrame O / P: -

+--------+----------+--------+--------+----------+-----+
|    OMIC|      SMIC|    VCLP|   VName|badRecords|rowId|
+--------+----------+--------+--------+----------+-----+
|colData1|0012-11-09|colData2|colData3|      null|    0|
|colData4|0012-11-09|colData5|colData6|      null|    1|
|colData7|0012-11-09|colData8|colData9|      null|    2|
+--------+----------+--------+--------+----------+-----+

Пожалуйста, предложите

1 Ответ

2 голосов
/ 07 мая 2020

Вы не можете достичь этого с помощью опции dateFormat, он принимает 2020/05/07, но меняет формат на недопустимый 0012-11-09. Вы можете попробовать изменить тип столбца SMIC на StringType в своей схеме, а затем преобразовать его в дату в правильном формате с помощью функции to_date.

df2 = df.withColumn("badRecord", f.when(f.to_date(f.col("SMIC"),"dd/MM/yyyy").isNotNull, False).otherwise(True))

output:

+--------+----------+--------+--------+---------+
|    OMIC|      SMIC|    VCLP|   VName|badRecord|
+--------+----------+--------+--------+---------+
|colData1|2020/05/07|colData2|colData3|     true|
|colData4|2020/05/07|colData5|colData6|     true|
|colData7|2020/05/07|colData8|colData9|     true|
|colData7|07/05/2020|colData8|colData9|    false|
+--------+----------+--------+--------+---------+
...