问题标签 [aws-glue-spark]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
184 浏览

pyspark - 在 AWS Glue 的 pySpark 中使用 KMS 解密记录

我们正在对某些文本内容执行客户端加密,并将它们存储到 s3 中的单个文件中。我们希望阅读这些文件并处理 AWS Glue 中的内容。我们能够读取内容,但在解密过程中,我们得到一个选择错误。

这是我们得到的错误:

有没有办法做到这一点?

0 投票
2 回答
162 浏览

python - AWS Glue - 替换包含“。”的字段名称 和 ”_”

我正在尝试替换所有具有“。”的字段。在字段名称中添加到“_”。

这就是我所拥有的:

但我想我错过了一些作品。不断收到以下错误:在relationalize_and_write中重命名= apply_renaming_mapping(m_df.toDF()) File apply_renaming_mapping reanmed= ApplyMapping(frame=df, mappings=mappings) TypeError: ApplyMapping() takes no arguments 在处理上述异常期间,发生了另一个异常:回溯(最近一次通话最后):

我在这里做错了什么?

0 投票
1 回答
392 浏览

apache-spark - AWS Glue - 在 json 文件中具有不同架构的 DynamicFrame

示例: 我在 Glue 目录中有一个带有 DDL 的分区表:

S3 中的底层数据是具有不同模式的 json 文件,这意味着某些元素可能不存在于某些文件中但存在于其他文件中。

在此示例 partition_0='01' 包含包含所有元素的 json 文件:

partition_0='02' 中的文件不包含元素 data.b:

问题: 当我在 Glue(我使用 Python)中创建 DynamicFrame 时,它​​的架构取决于我查询的数据。如果我包含来自 partition_0='01' 的数据,则所有元素都存在于架构中。

如果我仅查询 partition_0='02' 中的数据,则即使元素 data.b 存在于表定义中,它也不存在于 DynamicFrame 架构中。

问题:如何创建始终包含 Glue 表架构中所有元素的 DynamicFrame 或 DataFrame?

提前致谢!

0 投票
1 回答
365 浏览

amazon-web-services - 仅在数据更新时运行粘合作业

我有一个将数据从 S3 传输到 Redshift 的胶水作业。我希望它安排它,以便它在每次重新上传或更新 S3 中的数据时运行。我该怎么做?我在这里尝试了代码 sol 并制作了一个 lambda 函数:How to Trigger Glue ETL Pyspark job through S3 Events or AWS Lambda?

替换了作业名称。但是,运行它给了我:

0 投票
1 回答
1126 浏览

amazon-redshift - 如何在 AWS REDSHIFT 中使现有列不为空?

我已经通过胶水作业动态创建了一个表格,并且它成功地工作正常。但根据新要求,我需要添加一个生成唯一值的新列,并且应该是 redshift 中的主键。

我已经使用 rownum() 函数实现了相同的功能,并且工作正常。但是最新的要求是特定列应该是主键。

当我尝试这样做时,它要求该列不为空。你知道如何通过粘合作业使列不为空吗?或任何使其不为空的红移查询。我尝试了所有方法都没有运气。

0 投票
1 回答
62 浏览

amazon-web-services - 如何从用 pyspark 编写的胶水 ETL 作业中保存 S3 中的机器学习模型(Kmeans)?

我尝试了 model.save(sc, path) 它给了我错误:TypeError: save() 需要 2 个位置参数,但给出了 3 个。这里 sc 是 sparkcontext [sc = SparkContext()] 我尝试在签名中不使用 sc,但出现此错误:调用 o159.save 时发生错误。java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.mapred.DirectOutputCommitter not found 我尝试了多种使用boto3 pickle joblib的方法,但我没有成功找到可行的解决方案。我正在创建一个 KMeans 聚类模型。我需要一个胶水作业来适应并将模型保存在 S3 中,然后再进行另一个胶水作业来通过加载保存的模型来进行预测。我第一次这样做,任何帮助将不胜感激。

0 投票
1 回答
35 浏览

amazon-web-services - 是否可以流式传输 AWS cloudwatch 日志

我知道可以将 CloudWatch Logs 数据流式传输到 Amazon Elasticsearch Service。它记录在这里,但是是否可以将日志数据流式传输到自定义 AWS Glue 作业或 EMR 作业?

0 投票
1 回答
439 浏览

amazon-web-services - 使用 Glue 将多个数据文件合并为一个 - 作业成功但没有输出文件

TL;博士

  • 我正在尝试使用 Glue [Studio] 作业将许多 S3 数据文件合并为更少的数量
  • 输入数据在 Glue 中编目并可通过 Athena 查询
  • Glue 作业以“成功”输出状态运行,但未创建输出文件

细节

输入我有从刮板以每分钟一次的周期创建的数据。它将 JSON (gzip) 格式的输出转储到存储桶中。我在 Glue 中对这个存储桶进行了编目,并且可以使用 Athena 毫无错误地查询它。这让我更有信心正确设置目录和数据结构。单独来说,这并不理想,因为它每天创建约 1.4K 文件,这使得对数据的查询(通过 Athena)非常慢,因为它们必须扫描太多、太小的文件

目标我想定期(可能每周一次,每月一次,我还不确定)将每分钟一次的文件合并到更少的文件中,以便查询扫描更大和更少的文件(更快的查询)。

方法我的计划是创建一个 Glue ETL 作业(使用 Glue Studio)从目录表中读取,并写入一个新的 S3 位置(保持相同的 JSON-gzip 格式,所以我可以将 Glue 表重新指向包含合并文件的新 S3 位置)。我使用 Glue Studio 设置了作业,当我运行它时它说成功,但是没有输出到指定的 S3 位置不是空文件,根本没有输出)。

卡住!我有点茫然,因为(1)它说它成功了,(2)我什至没有修改脚本(见下文),所以我认为(也许是个坏主意)它不是那。

日志我尝试通过 CloudWatch 日志查看它是否会有所帮助,但我并没有从中得到什么。我怀疑它可能与此条目有关,但我找不到确认或更改任何内容以“修复”它的方法。(路径肯定存在,我可以在 S3 中看到它,目录可以搜索它并由 Athena 查询验证,并且它是由 Glue Studio 脚本生成器自动生成的。)对我来说,这听起来像我我在某处选择了一个选项,使它认为我只想要对数据进行某种“增量”扫描。但我没有(有意地),也找不到任何能让我看起来有的地方。

CloudWatch 日志条目

胶水脚本

我首先研究的其他帖子

没有人有同样的问题,即“成功”的工作没有提供任何输出。但是,一个创建了空文件,而另一个创建了太多文件。最有趣的方法是使用 Athena 为您创建新的输出文件(使用外部表);但是,当我对此进行研究时,似乎输出格式选项没有 JSON-gzip(或没有 gzip 的 JSON),而只有 CSV 和 Parquet,我不喜欢使用它们。

如何使用 AWS Glue 将许多 CSV 文件转换为 Parquet

AWS Glue:ETL 作业创建许多空输出文件

AWS Glue 作业 - 写入单个 Parquet 文件

AWS Glue,输出一个带分区的文件

0 投票
1 回答
751 浏览

amazon-web-services - AWS Glue Python 作业未创建新的数据目录分区

我使用 Glue Studio 创建了一个 AWS Glue 作业。它从 Glue 数据目录中获取数据,进行一些转换,然后写入不同的数据目录。

在配置目标节点时,我启用了运行后创建新分区的选项:

在此处输入图像描述

作业成功运行,数据以正确的分区文件夹结构写入 S3,但在实际数据目录表中没有创建新分区 - 我仍然需要运行 Glue Crawler 来创建它们。

生成的脚本中负责创建分区的代码是这样的(作业的最后两行):

我究竟做错了什么?为什么没有创建新分区?如何避免必须运行爬虫才能在 Athena 中获得可用数据?

我正在使用 Glue 2.0 - PySpark 2.4

0 投票
2 回答
43 浏览

apache-spark - 在 PySpark 中匹配数组

我正在尝试使用 PySpark 作为 AWS Glue 作业的一部分来操作两个数据帧。

df1:

df2:

我想通过以下方式将 df2 中的数组与 df1 中的标签进行匹配:

因此,df1 中的标签用于根据 df2 中的标签条目扩展行。例如,项目 1 的标记“AB”出现在 df2 中前两行的标记数组中。

还要注意 4 是如何被忽略的,因为 df2 中的任何数组中都不存在标签 QQ。

我知道这将是一个内部连接,但我不确定如何将 df1.tag 与 df2.tags 匹配以引入 key1 和 key2。任何帮助将不胜感激。