如何以最佳方式存储数据以便在 google 云上的 PySpark 中使用
how to store data optimally for use in PySpark on google cloud
我将使用 PySpark 在相当大的结构化数字数据集 (>1TB) 上 运行 东西(回归、机器学习等)。当前数据在 google 云存储中为 CSV 格式。将数据转换为某种其他格式(Parquet 等)以加快读取到 Spark 中的速度是否最佳,或者将读取速度保持在 csv 中大致相同?
将数据转换为 Parquet 应该会给您带来不错的加速。通过 Parquet 应用的编码和压缩编解码器,不仅文件会更小,而且当使用 Parquet 作为输入格式时,Spark 可以创建更高效的计算图。在 Parquet 的情况下,PySpark 可以在计算开始时加载 Parquet 文件的元数据和模式,并使用此 metadata/schema 构建更高效的计算图。
该模式会告诉 PySpark 列中包含的数据类型,因此可以使用具有正确类型的更优化的例程,而在 CSV 中,您实际上会读取字符串值,然后稍后将它们转换为正确的二进制类型。由于 Parquet 是一种列格式,计算中不需要的列甚至不会从存储中加载。此外,元数据会告诉 Spark 一些关于数据分布的信息,因此调度程序可以更轻松地在所有工作人员之间分配负载。
我将使用 PySpark 在相当大的结构化数字数据集 (>1TB) 上 运行 东西(回归、机器学习等)。当前数据在 google 云存储中为 CSV 格式。将数据转换为某种其他格式(Parquet 等)以加快读取到 Spark 中的速度是否最佳,或者将读取速度保持在 csv 中大致相同?
将数据转换为 Parquet 应该会给您带来不错的加速。通过 Parquet 应用的编码和压缩编解码器,不仅文件会更小,而且当使用 Parquet 作为输入格式时,Spark 可以创建更高效的计算图。在 Parquet 的情况下,PySpark 可以在计算开始时加载 Parquet 文件的元数据和模式,并使用此 metadata/schema 构建更高效的计算图。
该模式会告诉 PySpark 列中包含的数据类型,因此可以使用具有正确类型的更优化的例程,而在 CSV 中,您实际上会读取字符串值,然后稍后将它们转换为正确的二进制类型。由于 Parquet 是一种列格式,计算中不需要的列甚至不会从存储中加载。此外,元数据会告诉 Spark 一些关于数据分布的信息,因此调度程序可以更轻松地在所有工作人员之间分配负载。