我有一個包含大約一百萬條記錄的 spark 資料框。我正在嘗試將此資料幀拆分為多個小資料幀,其中每個資料幀的最大行數為 20,000(這些資料幀中的每一個的行數都應為 20,000,除了最后一個資料幀可能有也可能沒有 20,000)。你能幫我解決這個問題嗎?謝謝你。
uj5u.com熱心網友回復:
好的,也許不是最有效的方法,但就是這樣。您可以創建一個計算每一行的新列(如果您沒有唯一的 Id 列)。在這里,我們基本上是遍歷整個資料幀并選擇大小為 20k 的批次,將它們添加到資料幀串列中。
import org.apache.spark.sql.functions._
import spark.implicits._
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions.monotonically_increasing_id
var index = 0
val subsetSize = 20000
var listOfDF: List[DataFrame] = List()
// withColumn optional if you already have a unique id per row
val df = spark.table("your_table").withColumn("rowNum", monotonically_increasing_id())
def returnSubDF(fromIndex: Int, toIndex: Int) = {
df.filter($"rowNum" >= fromIndex && $"rowNum" < toIndex)
}
while (index <= 1000000){
listOfDF = listOfDF : returnSubDF(index, index subsetSize)
index = subsetSize
}
listOfDF.head.show()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/512169.html
下一篇:如何在腳本運行時運行生成的代碼?
