小编rob*_*ur1的帖子

附加到实例的 IAM 角色“无法找到凭证” - 无法访问元数据端点

我正在使用具有自定义 Ubuntu 16.04 AMI 的 EC2 实例。

我正在尝试迁移到使用附加到实例的 IAM 角色来访问 S3。

我创建了一个具有以下权限的简单测试角色:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

以及以下政策文件:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

它已附加到已运行的 EC2 实例。

在 EC2 实例上,我以几种不同的方式测试了 CLI,并且得到了令人惊讶的结果。

ubuntu@machine:~$ aws s3 ls
Unable to locate credentials. You can configure credentials by running "aws configure".
Run Code Online (Sandbox Code Playgroud)
ubuntu@machine:~$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ---- …
Run Code Online (Sandbox Code Playgroud)

ubuntu amazon-ec2 amazon-web-services amazon-iam

6
推荐指数
1
解决办法
6119
查看次数

无法修复 Amazon Athena 中的分区

我最近一直在从事一个项目,该项目涉及使用 Glue 托管服务在 Amazon S3 中抓取数据。这成功地创建了一个 Metastore,我可以在 Glue 控制台上看到它。

我通过控制台手动解决了模式中的错误,例如 STRING --> TIMESTAMP、BIGINT --> STRING 等。一个分区似乎是从 S3 路径中的键自动创建的。即我在 s3 中的对象的键是这样的:

s3://mybucket/YYYMM/object.csv

Glue 通过密钥的 YYYMM(例如 201711)部分成功地对数据进行了分区。

当我运行查询时,我收到以下错误 HIVE_PARTITION_SCHEMA_MISMATCH 这表明虽然表架构已更新,但分区架构尚未更新

查看我发现的文档... https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#schema-syncing

具体来说

有几种方法可以解决此问题。首先,如果数据被意外添加,您可以删除导致架构差异的数据文件,删除分区,并重新抓取数据。其次,您可以删除单个分区,然后在 Athena 中运行 MSCK REPAIR 以使用表的架构重新创建分区。仅当您确信应用的架构将继续正确读取数据时,第二个选项才有效。

所以我尝试了第二个选项并运行。

ALTER TABLE mydb.mytable DROP PARTITION (partition_0=201711), PARTITION (partition_0=201712)
MSCK REPAIR TABLE mydb.mytable
Run Code Online (Sandbox Code Playgroud)

删除分区似乎是成功的,但运行修复表会产生

Partitions not in metastore: mytable:201711 mytable:201712

而且我无法取回任何数据。手动读取分区似乎也不起作用。

例如

ALTER TABLE mydb.mytable ADD
    PARTITION (partition_0=201711) LOCATION 's3://bucket/201711',
Run Code Online (Sandbox Code Playgroud)

给出错误 line 2:2: missing 'column' at 'partition' (service: amazonathena; status code: 400; error …

hive amazon-web-services amazon-athena aws-glue

3
推荐指数
1
解决办法
7558
查看次数

AWS Glue ApplyMapping 从双精度数到字符串

我在胶水作业方面遇到了一些令人沮丧的问题。

我有一个从爬虫创建的表。它检查了一些 CSV 数据并创建了一个架构。需要修改模式的某些元素,例如将数字更改为字符串并应用标头。

我似乎在这里遇到了一些问题 - 某些字段的模式似乎已被选择为双精度。当我尝试将其转换为我需要的字符串时,它包含一些空精度,例如 1234 --> 1234.0。

我的映射代码类似于:

applymapping1 = ApplyMapping.apply(
    frame = datasource0, 
    mappings = [
        ("col1","double","first_column_name","string"),
        ("col2","double","second_column_name","string")
    ], 
    transformation_ctx = "applymapping1"
 )
Run Code Online (Sandbox Code Playgroud)

爬取数据后得到的结果表类似于:

first_column_name    second_column_name
1234.0               4321.0
5678.0               8765.0
Run Code Online (Sandbox Code Playgroud)

相对于

first_column_name    second_column_name
1234                 4321
5678                 8765
Run Code Online (Sandbox Code Playgroud)

有没有好的方法来解决这个问题?我尝试将爬虫程序最初创建的表中的模式更改为 bigint 而不是 double,但是当我将映射代码更新为 ("col1","bigint","first_column_name","string" )该表最终会变为空。

amazon-web-services aws-glue

3
推荐指数
1
解决办法
2万
查看次数

PySpark根据名称将列表分解为多个列

嗨,我正在处理一个有点困难的文件格式,我正在尝试对其进行清理以备将来处理。我一直在使用Pyspark将数据处理成数据框。

该文件类似于以下内容:

AA 1234  ZXYW
BB A 890
CC B 321
AA 1234  LMNO
BB D 123
CC E 321
AA 1234  ZXYW
CC E 456
Run Code Online (Sandbox Code Playgroud)

每个“ AA”记录都定义一个或多个逻辑组的开始,并且每一行上的数据都是固定长度的,并且其中包含我要提取的编码信息。至少有20-30种不同的记录类型。每一行的开头始终用两个字母代码标识它们。每个组中可以有1个或许多不同的记录类型(即,并非每个组都存在所有记录类型)

作为第一步,我设法按以下格式将记录分组在一起:

+----------------+---------------------------------+
|           index|                           result|
+----------------+---------------------------------+
|               1|[AA 1234  ZXYV,BB A 890,CC B 321]|
|               2|[AA 1234  LMNO,BB D 123,CC E 321]|
|               3|[AA 1234  ZXYV,CC B 321]         |
+----------------+---------------------------------+
Run Code Online (Sandbox Code Playgroud)

第二步,我真的想将数据放入数据框的以下列中:

+----------------+---------------------------------+-------------+--------+--------+
|           index|                           result|           AA|      BB|      CC|
+----------------+---------------------------------+-------------+--------+--------+
|               1|[AA 1234  ZXYV,BB A 890,CC B 321]|AA 1234  ZXYV|BB A 890|CC B …
Run Code Online (Sandbox Code Playgroud)

python apache-spark apache-spark-sql pyspark

2
推荐指数
2
解决办法
5297
查看次数