Попытка преобразовать серию сжатых gz в формат паркета.
В процессах пытаются сделать какие-то преобразования.(уменьшите количество полей, приведите и т. д.) После некоторой отладки кажется, что когда я пытаюсь спроецировать поле на временную метку, в полученном файле паркета отсутствует поле.
соответствующий фрагмент кода Python:
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
datasource0 = glueContext.create_dynamic_frame.from_options(connection_type = "s3", connection_options = {"paths": ["<s3 path>"]}, format = "json", transformation_ctx = "read")
datasource0 = ApplyMapping.apply(frame = datasource0, mappings = [("timestamp", "string", "timestamp", "long"), ("name", "string", "name", "string"), ("value", "string", "value", "string"), ("type", "string", "type", "string")])
datasource0 = SelectFields.apply(frame = datasource0, paths = ["timestamp", "name", "value", "type"])
# here is where the parquet schema changes
# the timestamp column is no longer there in parquet tools
datasource0 = ResolveChoice.apply(frame = datasource0, specs = [('timestamp','project:timestamp'), ('name','cast:string'), ('type','cast:string'), ('value','cast:string')])
glueContext.write_dynamic_frame.from_options(datasource0, connection_type = "s3", connection_options = {"path": "<another s3 path>"}, format = "parquet", format_options = {'compression': 'gzip'}, transformation_ctx = "write")
job.commit()
Вплоть до выбора ResolveChoice, если я буду использовать инструменты партера в полученном файле паркета, я буду видеть четыре поля.
Однако после использования этой строки я получаю следующее:
message spark_schema {
optional binary name (UTF8);
optional binary value (UTF8);
optional binary type (UTF8);
}
поле метки времени отсутствует.
project: устраняет потенциальную неоднозначность, проецируя все данные на один извозможные типы данных.Например, если данные в столбце могут быть целыми числами или строками, при использовании проекта: строковое действие создает в результирующем динамическом кадре столбец, в котором все значения целых чисел преобразуются в строки.
, поэтому мне было интереснонет способа проецировать на тип отметки времени?