ITMISS
repartition()用于对内存中的数据进行分区,并partitionBy用于对磁盘上的数据进行分区。如本博客文章所述,它们通常结合使用。二者repartition()并partitionBy可以用于“基于数据帧列分区数据”,但repartition()在存储分区中的数据和partitionBy分区在磁盘上的数据。repartition()让我们玩一些代码以更好地了解分区。假设您具有以下CSV数据。first_name,last_name,countryErnesto,Guevara,ArgentinaVladimir,Putin,RussiaMaria,Sharapova,RussiaBruce,Lee,ChinaJack,Ma,Chinadf.repartition(col("country")) 将按内存中的国家/地区对数据进行分区。让我们写出数据,以便我们可以检查每个内存分区的内容。val outputPath = new java.io.File("./tmp/partitioned_by_country/").getCanonicalPathdf.repartition(col("country")) .write .csv(outputPath)这是将数据写到磁盘上的方法:partitioned_by_country/ part-00002-95acd280-42dc-457e-ad4f-c6c73be6226f-c000.csv part-00044-95acd280-42dc-457e-ad4f-c6c73be6226f-c000.csv part-00059-95acd280-42dc-457e-ad4f-c6c73be6226f-c000.csv每个文件都包含一个国家/ part-00059-95acd280-42dc-457e-ad4f-c6c73be6226f-c000.csv地区的数据-该文件包含以下中国数据,例如:Bruce,Lee,ChinaJack,Ma,ChinapartitionBy()让我们将数据写到磁盘上partitionBy,看看文件系统输出如何不同。这是将数据写到磁盘分区的代码。val outputPath = new java.io.File("./tmp/partitionedBy_disk/").getCanonicalPathdf .write .partitionBy("country") .csv(outputPath)磁盘上的数据如下所示:partitionedBy_disk/ country=Argentina/ part-00000-906f845c-ecdc-4b37-a13d-099c211527b4.c000.csv country=China/ part-00000-906f845c-ecdc-4b37-a13d-099c211527b4.c000 country=Russia/ part-00000-906f845c-ecdc-4b37-a13d-099c211527b4.c000为什么要对磁盘上的数据进行分区?如本博文所述,对磁盘上的数据进行分区可以使某些查询运行得更快。