[FIXED] Scala – Aufteilen des Datenrahmens basierend auf der Anzahl der Zeilen

Ausgabe

Ich habe einen Spark-Datenrahmen mit ungefähr einer Million Datensätzen. Ich versuche, diesen Datenrahmen in mehrere kleine Datenrahmen aufzuteilen, wobei jeder dieser Datenrahmen eine maximale Zeilenanzahl von 20.000 hat (Jeder dieser Datenrahmen sollte eine Zeilenanzahl von 20.000 haben, mit Ausnahme des letzten Datenrahmens, der 20.000 haben kann oder nicht). Kannst du mir dabei helfen? Vielen Dank.

Lösung

Ok, vielleicht nicht der effizienteste Weg, aber hier ist er. Sie können eine neue Spalte erstellen, die jede Zeile zählt (falls Sie keine eindeutige ID-Spalte haben). Hier iterieren wir im Grunde über den gesamten Datenrahmen und wählen Stapel mit einer Größe von 20.000 aus und fügen sie einer Liste von Datenrahmen hinzu.

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()


Beantwortet von –
Jaime Caffarel


Antwort geprüft von –
David Goodson (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like