【问题标题】:AWS Glue not detecting header in CSVAWS Glue 未检测到 CSV 中的标头
【发布时间】:2022-02-17 02:04:43
【问题描述】:

您好,我在 S3 中有一堆 CSV,这是一个通过 AWS Glue 设置的爬虫,该爬虫在扫描 10 个文件夹时构建了大约 10 个表,其中只有一个没有检测到标题。 csv 的结构与所有其他的相同。请指教?

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-glue


    【解决方案1】:

    AWs 胶水爬虫根据多个规则解释标头。如果文件中的第一行不满足这些规则,则爬虫不会将第一行检测为标题,您需要手动执行此操作。这是一个非常常见的问题,我们在代码中集成了一个修复程序,这是我们数据管道的一部分。

    摘自aws doco

    要归类为 CSV,表架构必须至少有两个 列和两行数据。 CSV 分类器使用了许多 启发式方法来确定给定文件中是否存在标头。 如果分类器不能从第一行数据中确定一个表头, 列标题显示为 col1、col2、col3 等。这 内置 CSV 分类器确定是否通过 评估文件的以下特征:

    潜在标题中的每一列都解析为 STRING 数据类型。

    除了最后一列,潜在标题中的每一列都有 少于 150 个字符的内容。允许尾随 分隔符,文件的最后一列可以为空。

    潜在标题中的每一列都必须符合 AWS Glue 正则表达式 列名的要求。

    标题行必须与数据行充分不同。至 确定这一点,一个或多个行必须解析为 字符串类型。如果所有列都是 STRING 类型,则第一行 数据与后续行的差异不足以用作 标题。

    【讨论】:

      【解决方案2】:

      您可以自己创建表,而不是爬取指向 s3 路径的点,您可以基于现有表进行爬取。这是当爬虫没有检测到架构,尤其是列标题时使用的概念。

      还要检查skip.header.line.count=1 是否被自动添加,如果没有,您可以手动添加并将架构更新为您需要的正确架构。在您后续运行爬虫时,您可以更改属性,使其忽略架构更新并仅对您的表执行分区更新。

      【讨论】:

        【解决方案3】:

        您可以在爬虫上使用自定义分类器来解决此问题:https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html

        通常在分类器选项 列标题 部分中选择 有标题 可以解决问题,如果没有,可能需要在文本框中输入标题列表为此目的。

        【讨论】:

          【解决方案4】:

          因为您的列都被归类为字符串,所以这些列很可能违反了规则。在我的例子中,我有一个超过 150 个字符的列名,所以 Glue 将第一行作为数据读取,而不是标题,然后假设所有列都是字符串。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-02-27
            • 1970-01-01
            • 1970-01-01
            • 2019-04-07
            • 2018-11-09
            • 1970-01-01
            • 2015-03-28
            相关资源
            最近更新 更多