在pyspark中保存中间表的最佳方法

Best method to save intermediate tables in pyspark

这是我在 Whosebug 上的第一个问题。

我正在 Pyspark 中复制 SAS 代码库。 SAS 代码库生成并存储大量中间 SAS 数据集(我上次统计时为 100 个),这些数据集用于交叉检查最终输出以及稍后的其他分析。

我的目的是以某种格式保存大量 Pyspark 数据帧,以便它们可以在单独的 Pyspark 会话中重复使用。我想到了 2 个选项:

  1. 将数据帧保存为配置单元表。
  2. 将它们另存为镶木地板文件。

还有其他格式吗?哪种方法更快?在将文件重新读取为 Pyspark 数据帧时,parquet 文件或 csv 文件是否会出现与架构相关的问题?

最好的选择是使用 parquet 文件,因为它们具有以下优点:

  1. 3 倍压缩保存 space
  2. 柱状格式,更快的下推
  3. 使用火花催化剂优化器进行了优化
  4. 架构持续存在,因为镶木地板包含架构相关信息。

唯一的问题是确保您没有生成多个小文件,默认的 parquet 块大小为 128 mb,因此请确保您的文件足够大。您可以重新分区数据以确保文件大小足够大

使用 Delta Lake,迭代数据更改、可变架构、parquet 优势、轻松更新、跟踪更改、数据版本控制

Parquet 是 pyspark 的默认设置,运行良好。所以你可以只存储为拼花文件/配置单元 table。在推送到 hdfs/hive 之前,如果源上的文件可能很小,您可以对文件进行重新分区。如果数据量很大,请尝试使用 suitable 列对配置单元 table 进行分区。