首页 文章

Parquet和Spark的分区策略

提问于
浏览
2

我有一份工作,它读取csv文件,将其转换为数据帧并在Parquet中写入 . 我在Parquet中编写数据时使用追加模式 . 使用这种方法,在每次写入时都会生成一个单独的Parquet文件 . 我的问题是:

  • 1)如果每次将数据写入Parquet模式时,都会附加一个新文件,它是否会影响读取性能(因为数据现在分布在不同长度的分区Parquet文件中)

  • 2)有没有办法纯粹根据数据的大小生成Parquet分区?

  • 3)我们是否需要考虑自定义分区策略来实现第2点?我正在使用Spark 2.3

1 回答

  • 2

    在这种情况下,Spark需要访问每个文件并从中获取模式 .

    在其他情况下,我认为它不会对读取性能产生太大影响 .

    • 无法纯粹根据数据大小生成 . 您可以使用 repartitioncoalesce . 后者将创建不均匀的输出文件,但性能非常高 .

    此外,您有config spark.sql.files.maxRecordsPerFile 或选项 maxRecordsPerFile 来防止大文件,但通常不是问题 .

相关问题