Parquet文件的文档表明它可以存储/处理嵌套的数据类型。但是,我无法找到更多关于将这些嵌套的数据类型存储到Parquet时的最佳实践/陷阱/...的信息。
我正在考虑以下方案:
1.我正在使用PySpark(Spark 3.3)将我的Spark DataFrame存储到Delta Lake文件中(该文件在引擎盖下使用Parquet文件)。
- Spark DataFrame有一个数据类型为
StructType
的嵌套列,此外还有许多(100+)具有单一数据类型的“常规”列。
1.此嵌套列将具有许多子列(100+)
可以这样想
root
|-- id: long (nullable = true)
|-- key: string (nullable = true)
|-- info: struct (nullable = false)
| |-- topic_1: string (nullable = true)
| |-- digit_1: long (nullable = true)
| ...
我对此有以下问题:
1.嵌套的信息将存储为单列,还是将查找info.topic_1
,'info.digit_1',...列?
1.那么数组列或Map列呢?
1.看起来很多老的SO帖子都指出,如果有嵌套的列,将会读取更多的列。Spark 3仍然存在问题吗?
1.有存储这些嵌套数据类型的最佳实践吗?
I am aware of the following SO question, but people indicated it was for Spark 2.4
1条答案
按热度按时间qoefvg9y1#
您无需担心额外的立柱-立柱是 parquet 结构,也无需担心下推性能。
嵌套的属性都存储为一个新列,这很难解释,但
definition levels
和repetition levels
是关键概念。请咨询2个优秀职位:
顺便说一句:不知道为什么有人觉得需要更多的关注。