我有一份工作,它读取csv文件,将其转换为数据帧并在Parquet中写入 . 我在Parquet中编写数据时使用追加模式 . 使用这种方法,在每次写入时都会生成一个单独的Parquet文件 . 我的问题是:
-
1)如果每次将数据写入Parquet模式时,都会附加一个新文件,它是否会影响读取性能(因为数据现在分布在不同长度的分区Parquet文件中)
-
2)有没有办法纯粹根据数据的大小生成Parquet分区?
-
3)我们是否需要考虑自定义分区策略来实现第2点?我正在使用Spark 2.3
1 回答
在这种情况下,Spark需要访问每个文件并从中获取模式 .
在其他情况下,我认为它不会对读取性能产生太大影响 .
repartition
或coalesce
. 后者将创建不均匀的输出文件,但性能非常高 .此外,您有config
spark.sql.files.maxRecordsPerFile
或选项maxRecordsPerFile
来防止大文件,但通常不是问题 .