Укажите формат временной метки, написанной pyspark

#csv #apache-spark #timestamp #pyspark #emr

#csv-файл #apache-искра #временная метка #pyspark #emr

Вопрос:

Background — это программа simply pyspark, которую я разработал на 1.6, используя databricks csv для чтения / записи, и все были довольны. В моем фрейме данных был столбец временных меток, который был записан в стандартном YYYY-MM-DD HH24:MI:SS формате.

 foo,bar,2016-10-14 14:30:31.985 
 

Теперь я запускаю его на EMR с помощью Spark 2, и столбец временных меток записывается как эпоха в микросекундах. Это вызывает проблему, потому что цель (красное смещение) не может изначально обработать это (только секунды или миллисекунды).

 foo,bar,1476455559456000
 

Глядя на документы, кажется, что я должен быть в состоянии указать формат, используемый с timestampFormat , но я просто получаю сообщение об ошибке :

 TypeError: csv() got an unexpected keyword argument 'timestampFormat'
 

Я называю это неправильно, или эта опция не существует? Любой другой способ аккуратно вывести данные моей временной метки в формате, который не составляет микросекунд (было бы хорошо, если бы milli или любой другой стандартный формат времени)


Простой для воспроизведения код:

 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')
 

Ответ №1:

Оказывается, документы, которые я просматривал, были для 2.0.1, тогда как я работал на 2.0.0 — и timestampFormat является новым в 2.0.1.

Комментарии:

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

2. @msounthar В итоге я избежал проблемы, просто рассматривая ее как строку на протяжении всего задания, поскольку мне не нужно было манипулировать ею в процессе обработки.

3. Вам повезло!, по-видимому, это проблема spark 2.0.0, и она была исправлена в 2.0.1, но EMR на данный момент поддерживает только 2.0.0. github.com/apache/spark/pull/14279