我只是使用spark将数据从mongo传输到hdfs,将数据按某个字段进行分区,并按该字段存储在不同的文件夹中。我试图理解是应该指定“maxrecordsperfile”,还是应该将我的作业写入的一个大文件划分到每个文件夹,还是应该只为每个文件夹写入一个文件。我知道hdfs块的概念,hdfs会将大文件分割成块等等。我想知道在读取1个大文件和1000个不太大(但仍然比块大小大很多)的文件之间是否有区别。代码示例:
import org.apache.spark.sql.functions._
dataset
.withColumn(YEAR_COLUMN, year(col(DATE_COLUMN)))
.withColumn(MONTH_COLUMN, month(col(DATE_COLUMN)))
.write
//.option("maxRecordsPerFile", 100000) or some other number to make files around 1GB
.mode(SaveMode.Append)
.partitionBy(YEAR_COLUMN, MONTH_COLUMN)
.json(OUTPUT_PATH)
1条答案
按热度按时间4sup72z81#
我在reddit上得到了回答,答案是-https://www.reddit.com/r/apachespark/comments/jqx0te/what_is_the_difference_between_storing_1000_1gb/gbtgdek?utm_source=share&utm_medium=web2x&context=3