#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