amazon-web-services - 当列仅出现在某些 CSV 中时,爬虫无法正确排序数据
问题描述
我正在尝试建立一个数据湖。我们以以下格式将一堆 CSV 转储到 S3 中(对于提问过于简单):
bucket
|-- report_type1
|-- file1.csv
|-- file2.csv
|-- report_type2
|-- file3.csv
|-- file4.csv
|-- file5.csv
|-- report_type3
etc . . .
我想从这个湖中抓取数据并将部分数据推送到红移中,并使雅典娜湖可查询。为此,我通过 Glue 启动了一个爬虫。爬虫运行,创建了一堆表(report_type1,report_type2,report_type3,...)并完成。
但是,当我向 Athena 查询以检查它是否有效时,我发现在 Athena 中未正确分配某些列。例如,file1.csv 如下所示:
col0, col1, col2
0, 1, 3
2, 4, 9
2, 1, 7
但 file2.csv 看起来像这样:
col0, new_col, col1, col2
1, 3, 12, 8
3, , 10, 2
7, , 0,
所以在处理第二个数据集时,我们发现了一个额外的列。这是一个应该记录的合法列......但由于它不在第一个文件的数据中,因此没有添加到那里。
我最终看到的是,我会这样查询:
SELECT col1 FROM report_type1
在 athena 中,我会看到 col2 已经转移,现在我看到 col2 的值以 col1 的名义。我的假设是这与进入的额外列有关。我尝试使用所有不同的“找到新列时该怎么做”来运行爬虫
* Update the table definition in the data catalog.
* Add new columns only.
* Ignore the change and don't update the table in the data catalog
没有人努力解决这个问题。我可以使用不会以这种方式破坏的设置吗?
解决方案
推荐阅读
- javascript - ReactJS 如何正确调用多个函数
- json - 从 groovy 中的 JSONArray 中删除特定的 JSONObject
- javascript - 如何使用 setTimeout 中的参数解决承诺
- python - 如何在 django 模型中向 integerField 添加数字?
- azure - Azure ML Compute Instance: How can I safely upgrade the default Azure Ubuntu 16.04 LTS to the latest LTS?
- php - 除 WooCommerce 中的几个特定产品外,最小购物车数量
- php - 如何通过 php 脚本在 Ajax 中发送响应
- html - HTML边距对css没有反应
- scala - Dynamic dataframe with n columns and m rows
- javascript - 如何从隐藏元素中删除无限动画