Apache Spark Parquet中的嵌套数据类型

lf5gs5x2  于 2022-11-16  发布在  Apache
关注(0)|答案(1)|浏览(103)

Parquet文件的文档表明它可以存储/处理嵌套的数据类型。但是,我无法找到更多关于将这些嵌套的数据类型存储到Parquet时的最佳实践/陷阱/...的信息。
我正在考虑以下方案:
1.我正在使用PySpark(Spark 3.3)将我的Spark DataFrame存储到Delta Lake文件中(该文件在引擎盖下使用Parquet文件)。

  1. 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

qoefvg9y

qoefvg9y1#

您无需担心额外的立柱-立柱是 parquet 结构,也无需担心下推性能。
嵌套的属性都存储为一个新列,这很难解释,但definition levelsrepetition levels是关键概念。
请咨询2个优秀职位:

顺便说一句:不知道为什么有人觉得需要更多的关注。

相关问题