Моя проблема заключается в том, что определенный столбец в моем задании ETL не преобразуется в искомый тип данных, это означает, что при каждом запуске задания и последующем сканировании (ежедневно) тип данных является «строковым» и должен быть"int" (целое число).
В источнике данных тип данных "bigint", и я хочу, чтобы он был либо "bigint", либо "int" в финальной таблице.
Однако,этого не происходит, и тип данных столбца «тестер» в конечном итоге является строкой.
Этот столбец используется во многих запросах, поэтому важно, чтобы его можно было преобразовать в целое число (как это было до изменения).
Я пробовал несколько комбинаций источникаТип данных и целевой тип данных, однако ни один из них не работает и все заканчивается строкой.
Я надеюсь, что вы можете мне помочь, поскольку я не являюсь экспертом в AWS и не имею доступа к какой-либо дальнейшей поддержке.
Ниже мой код задания ETL вставлен (подвергнут цензуре)
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
import boto3
s3 = boto3.resource('s3')
bucket = s3.Bucket('XX-bi-team')
bucket.objects.filter(Prefix="Tables_after_jobs/XX/tester/").delete()
## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
## @type: DataSource
## @args: [database = "mysql_XX", table_name = "XX_XX_XX", transformation_ctx = "datasource0"]
## @return: datasource0
## @inputs: []
datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "mysql_XX", table_name = "XX_XX_XX", transformation_ctx = "datasource0")
## @type: ApplyMapping
## @args: [mapping = [("v1", "string", "v1", "string"), ("XX_threshold_XX", "string", "XX_threshold_XX", "string"), ("limit_XX", "string", "limit_XX", "string"), ("XX_threshold", "decimal(19,2)", "XX_threshold", "decimal(19,2)"), ("created", "timestamp", "created", "timestamp"), ("gee_XX", "string", "gee_XX", "string"), ("type", "string", "type", "string"), ("uuid", "binary", "uuid", "binary"), ("v2", "int", "v2", "int"), ("geeXX", "decimal(19,2)", "geeXX", "decimal(19,2)"), ("limitXX", "decimal(29,2)", "limitXX", "decimal(29,2)"), ("XX", "int", "XX", "int"), ("id", "long", "id", "long"), ("XX", "decimal(29,2)", "XX", "decimal(29,2)"), ("XX_XX_id", "long", "XX_XX_id", "long"), ("replaces_id", "long", "tester", "int")], transformation_ctx = "applymapping1"]
## @return: applymapping1
## @inputs: [frame = datasource0]
applymapping1 = ApplyMapping.apply(frame = datasource0, mappings = [("v1", "string", "v1", "string"), ("XX_threshold_XX", "string", "XX_threshold_XX", "string"), ("limit_XX", "string", "limit_XX", "string"), ("XX_threshold", "decimal(19,2)", "XX_threshold", "decimal(19,2)"), ("created", "timestamp", "created", "timestamp"), ("gee_XX", "string", "gee_XX", "string"), ("type", "string", "type", "string"), ("uuid", "binary", "uuid", "binary"), ("v2", "int", "v2", "int"), ("geeXX", "decimal(19,2)", "geeXX", "decimal(19,2)"), ("limitXX", "decimal(29,2)", "limitXX", "decimal(29,2)"), ("XX", "int", "XX", "int"), ("id", "long", "id", "long"), ("XX", "decimal(29,2)", "XX", "decimal(29,2)"), ("XX_XX_id", "long", "XX_XX_id", "long"), ("tester", "bigint", "tester", "int")], transformation_ctx = "applymapping1")
## @type: DataSink
## @args: [connection_type = "s3", connection_options = {"path": "s3://XX-bi-team/Tables_after_jobs/XX/tester"}, format = "json", transformation_ctx = "datasink2"]
## @return: datasink2
## @inputs: [frame = applymapping1]
datasink2 = glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": "s3://XX-bi-team/Tables_after_jobs/XX/tester"}, format = "json", transformation_ctx = "datasink2")
job.commit()
Как упоминалось выше, мне нужно, чтобы столбец "тестер" стал целым числом, а НЕ строкой, как это происходитв текущем состоянии.
Надеюсь, вы мне поможете.
Заранее спасибо!