【发布时间】:2022-01-17 04:27:04
【问题描述】:
我们在 s3 上使用分区读取以下文件路径
prefix/company=abcd/service=xyz/date=2021-01-01/file_01.json
prefix/company=abcd/service=xyz/date=2021-01-01/file_02.json
prefix/company=abcd/service=xyz/date=2021-01-01/file_03.json
当我用 pyspark 阅读这些内容时
self.spark \
.read \
.option("basePath", 'prefix') \
.schema(self.schema) \
.json(['company=abcd/service=xyz/date=2021-01-01/'])
所有文件都具有相同的架构,并作为行加载到表中。文件可能是这样的:
{"id": "foo", "color": "blue", "date": "2021-12-12"}
问题是有时文件的日期字段与我的分区代码冲突,例如date。所以我想知道是否可以在没有分区列的情况下加载文件,重命名 JSON 日期列,然后添加分区列。
决赛桌是:
| id | color | file_date | company | service | date |
-------------------------------------------------------------
| foo | blue | 2021-12-12 | abcd | xyz | 2021-01-01 |
| bar | red | 2021-10-10 | abcd | xyz | 2021-01-01 |
| baz | green | 2021-08-08 | abcd | xyz | 2021-01-01 |
编辑:
更多信息:我有时有 5 或 6 个分区,日期是其中之一(不是最后一个)。而且我也需要一次读取多个日期分区。我传递给 Spark 的架构还包含分区列,这使得它更加复杂。
我不控制输入数据,所以我需要按原样阅读。我可以重命名文件列,但不能重命名分区列。
是否可以像加入 2 个数据帧时那样为文件列添加别名?
火花 3.1
【问题讨论】:
-
您是否可以更改加载到 df 时传递的架构?
-
@blackbishop 是的,我定义了现在类似于
StructType([*partitions_colums, *file_columns])的输入模式,但我必须从 file_columns 中删除重复的列
标签: python apache-spark pyspark