Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何在glue中处理模式更改并在csv中获得预期的输出?_Amazon Web Services_Aws Glue - Fatal编程技术网

Amazon web services 如何在glue中处理模式更改并在csv中获得预期的输出?

Amazon web services 如何在glue中处理模式更改并在csv中获得预期的输出?,amazon-web-services,aws-glue,Amazon Web Services,Aws Glue,我正在尝试使用AWS胶水抓取一些具有不同SACHEM(数据兼容)的文件。 正如我在AWS文档中所读到的,Glue Crawler会更新目录表以应对模式中的任何更改(添加新列并删除缺少的列)。 在创建爬虫程序时,我已检查了“更新数据目录中的表定义”和“为每个S3路径创建一个模式”。 示例: 假设我有一个文件“File1.csv”,如下所示: 姓名、年龄、地点 拉维,12岁,印第安纳州 乔,32岁,美国 假设我有另一个文件“File2.csv”,如下所示: 姓名、年龄、身高 杰克,12160 简,3

我正在尝试使用AWS胶水抓取一些具有不同SACHEM(数据兼容)的文件。
正如我在AWS文档中所读到的,Glue Crawler会更新目录表以应对模式中的任何更改(添加新列并删除缺少的列)。 在创建爬虫程序时,我已检查了“更新数据目录中的表定义”和“为每个S3路径创建一个模式”。
示例:
假设我有一个文件“File1.csv”,如下所示:

姓名、年龄、地点

拉维,12岁,印第安纳州

乔,32岁,美国

假设我有另一个文件“File2.csv”,如下所示:

姓名、年龄、身高

杰克,12160

简,32180

在架构中运行的爬虫更新为: 姓名、年龄、位置、身高-如所述 但当我尝试使用Athena读取文件或尝试使用Glue ETL作业将两个文件的内容写入csv时,我发现: 输出如下所示:

姓名、年龄、位置、身高

拉维,12岁,印第安纳州

乔,32岁,美国

杰克,12160

简,32180

最后两行的loc应该为空,因为第二个文件没有loc列

如预期的那样:

姓名、年龄、位置、身高

拉维,12岁,印第安纳州

乔,32岁,美国

杰克,12岁,160岁

简,32岁,180岁


简言之,glue试图以连续的方式填充组合输出中的列。是否有任何方法可以获得预期的输出?

我使用拼花文件获得预期的输出。最初,我使用的是CSV,但CSV反序列化器不知道在模式更改时如何将元素放置到正确的位置。
将单个CSV更改为拼花地板,然后一个接一个地对它们进行爬行,这有助于我合并更改的模式。

我还发现,使用
org.apache.hadoop.hive.serde2.OpenCSVSerde
的Serde lib解析CSV也会错误地执行此操作。在我的数据中间,在数据集中引入了一列。当该列不存在时,不是适当地忽略该列,而是用不正确的值填充该列。在爬行之前转换到Parquest听起来像是一个很大的开销,因为爬行器部分应该解决一个bug。