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
EXPERTE
gefragt vor 6 Monaten22 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen