Mit monotonically_increasing_id() für die Zuweisung der Zeilennummer an pyspark dataframe
Ich bin mit monotonically_increasing_id() zuweisen Zeilennummer pyspark dataframe mit syntax unter:
df1 = df1.withColumn("idx", monotonically_increasing_id())
Nun df1 hat 26,572,528 records. Also ich hatte erwartet, idx Wert von 0-26,572,527.
Aber wenn ich select max(idx), sein Wert ist komischerweise riesig: 335,008,054,165.
Was ist Los mit dieser Funktion?
ist es zuverlässig, um diese Funktion zu verwenden, die für die Verschmelzung mit einem anderen dataset mit einer ähnlichen Anzahl von Datensätzen?
Habe ich rund 300 dataframes, die ich will, zu vereinen in einer einzigen dataframe. So ein dataframe enthält IDs und andere enthalten unterschiedliche Aufzeichnungen, die Ihnen entsprechenden row-wise
InformationsquelleAutor muni | 2018-01-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der Dokumentation
So, es ist nicht wie ein auto-increment id in RDBs und es ist nicht zuverlässig für die Zusammenführung aus.
Wenn Sie brauchen ein auto-Inkrement-Verhalten wie in RDBs und Ihre Daten sind sortierbar, dann können Sie
row_number
Wenn Ihre Daten nicht sortiert werden können, und Sie haben nichts dagegen, mit rdds zu schaffen, die Indizes und dann wieder fallen zu dataframes, die Sie verwenden können
rdd.zipWithIndex()
Kann ein Beispiel gefunden hier
Kurz:
Müssen Sie wahrscheinlich einige weitere Transformationen nach, die um Ihre dataframe, was Sie brauchen, es zu sein. Hinweis: nicht eine sehr performante Lösung.
Hoffe, das hilft. Viel Glück!
Edit:
Kommen Sie zu denken, können Sie kombinieren die
monotonically_increasing_id
zu verwenden, dierow_number
:Nicht sicher über Leistung obwohl.
Leider
row_number
ist eine windowing-Funktion, und es kann nicht verwendet werden, ohne Sortierung. Werfen Sie einen Blick auf die aktualisierte Antwort, als es helfen könnte.wenn wir die Sortierung von "idx", dann brauchen wir nicht wirklich, die row_number für die Teilnahme Recht? Ich kann direkt "idx"
ja, aber idx ist nicht konsekutiv, das heißt, Sie können nicht tun, ein Graf und vergleichen Sie verschiedene dataframes.
Lassen Sie uns weiter, diese Diskussion im chat.
InformationsquelleAutor mkaran
Verwendung von api-Funktionen, die Sie tun können, einfach die folgenden
Ich hoffe die Antwort ist hilfreich
InformationsquelleAutor Ramesh Maharjan
Fand ich die Lösung von @mkaran nützlich, Aber für mich war es keine Bestellung, Spalte, während Sie mit dem Fenster-Funktion. Ich wollte pflegen Sie die Reihenfolge der Zeilen des dataframe als Ihre Indizes (was Sie sehen, in ein pandas dataframe). Daher die Lösung im edit-Bereich kamen von nutzen. Da ist es eine gute Lösung (wenn die Leistung kein Problem), möchte ich es als eine separate Antwort.
df
Ihre ursprünglichen dataframe unddf_index
ist neuer dataframe.InformationsquelleAutor Ankita Mehta