在pyspark中保存中间表的最佳方法
Best method to save intermediate tables in pyspark
这是我在 Whosebug 上的第一个问题。
我正在 Pyspark 中复制 SAS 代码库。 SAS 代码库生成并存储大量中间 SAS 数据集(我上次统计时为 100 个),这些数据集用于交叉检查最终输出以及稍后的其他分析。
我的目的是以某种格式保存大量 Pyspark 数据帧,以便它们可以在单独的 Pyspark 会话中重复使用。我想到了 2 个选项:
- 将数据帧保存为配置单元表。
- 将它们另存为镶木地板文件。
还有其他格式吗?哪种方法更快?在将文件重新读取为 Pyspark 数据帧时,parquet 文件或 csv 文件是否会出现与架构相关的问题?
最好的选择是使用 parquet 文件,因为它们具有以下优点:
- 3 倍压缩保存 space
- 柱状格式,更快的下推
- 使用火花催化剂优化器进行了优化
- 架构持续存在,因为镶木地板包含架构相关信息。
唯一的问题是确保您没有生成多个小文件,默认的 parquet 块大小为 128 mb,因此请确保您的文件足够大。您可以重新分区数据以确保文件大小足够大
使用 Delta Lake,迭代数据更改、可变架构、parquet 优势、轻松更新、跟踪更改、数据版本控制
Parquet 是 pyspark 的默认设置,运行良好。所以你可以只存储为拼花文件/配置单元 table。在推送到 hdfs/hive 之前,如果源上的文件可能很小,您可以对文件进行重新分区。如果数据量很大,请尝试使用 suitable 列对配置单元 table 进行分区。
这是我在 Whosebug 上的第一个问题。
我正在 Pyspark 中复制 SAS 代码库。 SAS 代码库生成并存储大量中间 SAS 数据集(我上次统计时为 100 个),这些数据集用于交叉检查最终输出以及稍后的其他分析。
我的目的是以某种格式保存大量 Pyspark 数据帧,以便它们可以在单独的 Pyspark 会话中重复使用。我想到了 2 个选项:
- 将数据帧保存为配置单元表。
- 将它们另存为镶木地板文件。
还有其他格式吗?哪种方法更快?在将文件重新读取为 Pyspark 数据帧时,parquet 文件或 csv 文件是否会出现与架构相关的问题?
最好的选择是使用 parquet 文件,因为它们具有以下优点:
- 3 倍压缩保存 space
- 柱状格式,更快的下推
- 使用火花催化剂优化器进行了优化
- 架构持续存在,因为镶木地板包含架构相关信息。
唯一的问题是确保您没有生成多个小文件,默认的 parquet 块大小为 128 mb,因此请确保您的文件足够大。您可以重新分区数据以确保文件大小足够大
使用 Delta Lake,迭代数据更改、可变架构、parquet 优势、轻松更新、跟踪更改、数据版本控制
Parquet 是 pyspark 的默认设置,运行良好。所以你可以只存储为拼花文件/配置单元 table。在推送到 hdfs/hive 之前,如果源上的文件可能很小,您可以对文件进行重新分区。如果数据量很大,请尝试使用 suitable 列对配置单元 table 进行分区。