問題的提出
在進行數據處理時,我們經常遇到這樣的需求:把同一個key的數據寫到同一個文件/文件夾中。
這樣,在進行后續的處理,比如查看某個key占的磁盤空間,單獨處理某個key的數據等都會非常方便。
解決方案
通過來解決這個問題很方便。方案就是:通過該key進行分區,這樣同一個key的值就都分配到一個分區中了。
val people_rdd = sc.parallelize(Seq((1, "alice"), (1, "bob"), (2, "charlie")))

val people_df = people_rdd.toDF("number", "name")
people_df.write.partitionBy("number").text("people")
或則寫成其他文件格式:
people_df.write.partitionBy("number").json("people-json")
people_df.write.partitionBy("number").parquet("people-parquet")

通過來實現該功能非常方便,其實就是按照某個字段先分區文件夾里面的數字都是什么,若要排序也可以按分區進行排序,然后再按規定的格式寫入即可。
要注意的是,寫入的分區數據會按分區創建一個文件夾,同一個分區的數據在同一個文件夾中。若分區數太多,則創建的分區文件夾也會很多。
另外,在寫數據的時候也可以對數據先進行排序文件夾里面的數字都是什么,這樣就得到了一個排好序的數據文件。
小結
本文講述了如何把一個同一個key的文件寫入到同一個文件/文件夾的方法。