Фон - это просто программа pyspark, разработанная мной на 1.6 с использованием databricks csv read/writer, и все было счастливо. У моей DataFrame была отметка времени, которая была выписана в стандартном формате YYYY-MM-DD HH24:MI:SS
.Укажите формат метки времени, написанный pyspark
foo,bar,2016-10-14 14:30:31.985
Теперь я бег это на ОМ с искрой 2, а столбец временной метки записывается как эпохи в микросекундах. Это вызывает проблему, потому что цель (Redshift) не может справиться с этим (только секунды или миллисекунды).
foo,bar,1476455559456000
Глядя на the docs, мне кажется, я должен быть в состоянии определить формат, используемый с timestampFormat
, но я получаю сообщение об ошибке:
TypeError: csv() got an unexpected keyword argument 'timestampFormat'
Am звоню это неправильно, или же вариант не существовать? Любой другой способ чисто получить мои данные метки времени в формате, что это не микросекунд (милли будет хорошо, или любой другой стандартный формат времени действительно)
Простой код для воспроизведения:
df = sqlContext.createDataFrame([('foo','bar')]).withColumn('foo',pyspark.sql.functions.current_timestamp())
df.printSchema()
df.show()
# Use the new Spark 2 native method
df.write.csv(path='/tmp/foo',mode='overwrite')
# Use the databricks CSV method, pre Spark 2
df.write.save(path='/tmp/foo2',format='com.databricks.spark.csv',mode='overwrite')
Я столкнулся с той же проблемой. Вы выяснили, как писать временную метку в стандартном формате, отличном от формата эпохи, спасибо. – msounthar
@msounthar Я закончил тем, что избегал этой проблемы, просто рассматривая ее как строку на протяжении всей работы, так как мне не нужно было манипулировать ею в процессе обработки. –
Lucky you !, по-видимому, его искра 2.0.0 и его исправление в 2.0.1, но EMR поддерживает 2.0.0. https://github.com/apache/spark/pull/14279 – msounthar