AWS Glue Dynamic Dataframe relationalize

0

【以下的问题经过翻译处理】 我加载了json数据,并在动态数据帧上使用了relationalize方法,以扁平化原本嵌套的json对象,并将其保存为parquet格式。问题是,一旦保存为parquet格式,用于更快的Athena查询的列名包含点,这违反了Athena SQL查询语法,因此我无法进行列特定的查询。

为了解决这个问题,我还在Glue作业中重命名了列名,以排除点,而是用下划线代替。我的问题是,两种方法中哪种方法更好,为什么?(效率-内存?节点执行速度?等等)。

此外,由于令人难以置信的AWS Glue文档,我无法找到动态框架的唯一解决方案。我无法以动态方式获取列名,因此我正在利用toDF()。

  1. 第一种方法涉及从从动态数据帧中提取的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)
  1. 第二种方法是从动态数据帧中提取df,并在pyspark df上执行重命名字段(而不是动态数据帧),然后将其转换回动态数据帧并以parquet格式保存。

是否有更好的方法?网络爬虫能否重命名列?.fromDF()方法有多快?有没有比PDF开发人员指南更好的函数和方法文档?

profile picture
专家
已提问 5 个月前20 查看次数
1 回答
0

【以下的回答经过翻译处理】 在包含点的列名的parquet表中,可以运行特定列的查询。

表:parquet_table

root
|-- name: string
|-- url: string
|-- sample.key: string

查询:

SELECT "sample.key" FROM "parquet_table" limit 10;
SELECT * FROM "parquet_table" WHERE "sample.key" LIKE 'sample%' limit 10;

可以说的更详细一点么?你的表具有什么模式?你在哪些查询中看到了错误?

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则