如何在AWS Glue中正确重命名动态数据帧的列?

2024-09-21 11:48:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我加载JSON数据,并在动态dataframe上使用relationalize方法来展平嵌套的JSON对象,并将其保存为parquet格式。问题是,一旦保存为parquet格式以进行更快的Athena查询,列名就包含点,这与athenasql查询语法背道而驰,因此我无法进行特定于列的查询。你知道吗

为了解决这个问题,我还重命名了粘合作业中的列名,以排除点,并改为使用下划线。我的问题是这两种方法中哪一种更好,为什么?(效率-内存?节点执行速度?等等)。你知道吗

同样考虑到可怕的aws胶水文档,我不能想出一个动态的框架唯一的解决方案。我在以动态方式获取列名时遇到问题,因此我使用toDF()。你知道吗

1)第一种方法是从动态df中提取df中的列名

relationalize1 = Relationalize.apply(frame=datasource0, transformation_ctx="relationalize1").select("roottable")
    df_relationalize1 = relationalize1.toDF()
    for field in df_relationalize1.schema.fields:
        relationalize1 = RenameField.apply(frame = relationalize1, old_name = "`"+field.name+"`", new_name = field.name.replace(".","_"), transformation_ctx = "renamefield_" + field.name)

2)第二种方法是从dynamic df中提取df,并对pyspark df(而不是dynamic df)执行rename字段,然后将其转换回dynamic df并以parquet格式保存。你知道吗

有更好的方法吗?爬虫可以重命名列吗?.fromDF()方法有多快?有没有比pdf开发人员指南更好的函数和方法文档?你知道吗


Tags: 方法name文档jsonfielddf格式动态

热门问题