我在 Glue 中设置了一个爬虫程序,它可以从 S3 存储桶抓取压缩的 CSV 文件(GZIP 格式)。我有一个 ETL 作业,它将此 CSV 转换为镶木地板和另一个读取镶木地板文件并填充镶木地板表的爬网程序。
第一个读取压缩CSV文件(GZIP格式)的爬虫似乎正在读取GZIP文件头信息。CSV 文件有五个字段。以下是示例数据
3456789,1,200,20190118,9040
但是,爬网程序填充表后,行如下所示。
xyz.csv0000644000175200017530113404730513420142427014701 0ustar wlsadmin3456789 1 200 20190118 9040
第一列包含一些附加数据,这些数据具有文件名和创建 GZIP 文件的计算机的用户名。
任何想法,我如何避免这种情况并读取正确的值。
在这种情况下,您将无法使用 AWS Glue 爬网程序创建表。
https://docs.aws.amazon.com/glue/latest/dg/add-classifier.html
当然,您可以尝试实现Glue Grok自定义分类器,但这样做可能很困难。
https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#custom-classifier-grok
我建议使用雅典娜或 Glue 控制台中的创建命令手动创建表。因为您需要跳过第一行,所以您必须在TBLPROPERTIES中设置"skip.header.line.count"="1"选项。此表的定义可能如以下示例所示:
CREATE EXTERNAL TABLE `gzip_test`(
`col1` bigint,
`col2` bigint,
`col3` bigint,
`col4` bigint,
`col5` bigint)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://example/example'
TBLPROPERTIES (
'classification'='csv',
'columnsOrdered'='true',
'compressionType'='gzip',
'delimiter'=',',
'skip.header.line.count'='1',
'typeOfData'='file')