从AWS胶水作业中的数据源中读取标题

时间:2018-05-30 18:03:29

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

我有一个AWS胶水作业,可以从数据源读取,如下所示:

datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "dev-data", table_name = "contacts", transformation_ctx = "datasource0")

但是当我在动态框架上调用.toDF()时,标题是' col0',' col1'' col2'等等,我的实际标题位于数据帧的第一行。

注意 - 我无法手动设置它们,因为数据源中的列是可变的&迭代循环中的列以设置它们会导致错误,因为您必须多次设置相同的数据帧变量,而胶水无法处理。

从数据源读取时如何捕获标题?

3 个答案:

答案 0 :(得分:2)

事实证明,这是粘合爬网程序中的一个错误,它们尚不支持标头。我使用的解决方法是无论如何都要进行爬网数据的动作,然后在爬网程序完成时,我有一个lambda触发了爬网程序完成云监视事件,并且lambda启动了直接从s3读取的胶粘作业。固定胶水以支持阅读标题时,我可以切换出阅读标题的方式。

答案 1 :(得分:1)

我知道这篇文章很老,但是我遇到了类似的问题,花了太长时间才弄清楚问题出在哪里。希望分享我的解决方案,以防对他人有所帮助!

我在AWS上使用GUI时,却忘记了在运行搜寻器之前实际上向爬虫添加了正确的分类器。这导致AWS Glue错误地检测到数据类型(它们大多以字符串形式出现)并且未检测到列名(它们以col1,col2等形式出现)。您可以在“抓取工具”下的“分类器”中创建分类器。然后,在设置搜寻器时,将您的分类器添加到底部的“所选分类器”部分。

文档:https://docs.aws.amazon.com/glue/latest/dg/add-classifier.html

答案 2 :(得分:0)

您可以尝试 withHeader 参数。例如

dyF = glueContext.create_dynamic_frame.from_options(
    's3',
    {'paths': ['s3://awsglue-datasets/examples/medicare/Medicare_Hospital_Provider.csv']},
    'csv',
    {'withHeader': True})

有关此文档,请参见https://jestjs.io/docs/en/asynchronous