Очевидное решение: используйте любой другой тип, кроме TimestampType или DateType
, например, используйте этот udf для LongType (чтобы продемонстрировать, что это действительно проблема длины метки времени).
import datetime
import time
def conv_ts(d) :
return time.mktime(d.timetuple())
ts_udf = F.udf(lambda z : int(conv_ts(z)), LongType())
(Примечание что в этом фрагменте искровым вводом является timestampType, а не dateType, поэтому python datetime, а не date, потому что я тоже пытался возиться с преобразованиями времени)
ИЛИ (гораздо более эффективный способ), очевидно, чтобы избежать udf используя поле форматированной даты StringType вместо длинной метки времени благодаря функции pyspark.sql.date_format
.
Решение, но не совсем удовлетворительное, я бы скорее понял, почему коннектор не работает должным образом с timestampTypes и dateTypes путем соответствующей корректировки длины метки времени.