amazon-web-services - 列的数据类型在粘合数据目录和 getCatalogSource 函数中有所不同
问题描述
我创建了一个胶水爬虫来读取 apache 访问日志。下面是爬虫在 Glue 数据目录中创建的表定义。我能够从 Athena 获得以下 DDL 语句。
CREATE EXTERNAL TABLE crawler_access_log(
.. Other column names
timestamp string COMMENT 'from deserializer'
) ROW FORMAT SERDE
'com.amazonaws.glue.serde.GrokSerDe'
WITH SERDEPROPERTIES (
'input.format'='%{COMBINEDAPACHELOG}')
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://some location'
TBLPROPERTIES (
'CrawlerSchemaDeserializerVersion'='1.0',
'CrawlerSchemaSerializerVersion'='1.0',
'UPDATED_BY_CRAWLER'='crawler_access_log',
'averageRecordSize'='268',
'classification'='combinedapache',
'compressionType'='gzip',
'grokPattern'='%{COMBINEDAPACHELOG}',
'objectCount'='2',
'recordCount'='71552',
'sizeKey'='25268746',
'typeOfData'='file')
//SAMPLE TIMESTAMP (Data type as string) COULMN DATA
20/Jul/2018:03:27:44 +0000
20/Jul/2018:03:27:44 +0000
但是当我通过glueContext从同一个表中读取数据时,timestamp
列的数据类型变为date
而不是string
。我使用下面的代码从表中读取数据。
val rawDynamicDataFrame = glueContext.getCatalogSource(database = "someDB",
tableName = "crawler_access_log", redshiftTmpDir = "", transformationContext
= "rawDynamicDataFrame").getDynamicFrame();
当我执行 printSchema 并查看动态数据框的数据时,我看到该timestamp
列的数据类型date
不是 .string
因此数据被截断。
scala> rawDynamicDataFrame.printSchema
root
|-- xx: string
|-- xx: string
|-- xx: string
|-- timestamp: date
|-- xx: string
|-- xx: string
|-- xx: string
scala> rawDynamicDataFrame.show(2)
2018-07-20 ///Original (20/Jul/2018:03:27:44 +0000)
2018-07-20 ///Original (20/Jul/2018:03:27:44 +0000)
即使胶水从胶水目录中读取数据,我也无法弄清楚为什么数据类型会发生变化。
解决方案
推荐阅读
- kate - 如何更新语法文件?
- python - 如何对多列中的所有行求和
- java - 搜索建议系统
- architecture - System Design 来自 ML 模型的数据工程系统
- javascript - 找不到屏幕“OnboardPage”的“组件”、“getComponent”或“儿童”道具
- react-native - React Three.js 动态变量以更改网格计数“无法读取 null 的属性 'id'”
- typescript - 如何将类型实现到接口定义中?
- javascript - 使用减速器设置上下文时挂钩调用无效
- python - 有没有办法知道哪个 sklearn 版本用于训练泡菜模型?
- ruby-on-rails - Ruby 使用 SHA2 从哈希中派生 UUID