PySpark 2.0 Die Größe oder Form eines DataFrame


75

Ich versuche, die Größe / Form eines DataFrame in PySpark herauszufinden. Ich sehe keine einzige Funktion, die dies kann.

In Python kann ich tun

data.shape()

Gibt es eine ähnliche Funktion in PySpark? Dies ist meine aktuelle Lösung, aber ich suche nach einem Element

row_number = data.count()
column_number = len(data.dtypes)

Die Berechnung der Spaltenanzahl ist nicht ideal ...


Dies in eine Funktion setzen?
GwydionFR

Du meinst data.shapefür NumPy und Pandas? shapeist keine Funktion.
flow2k

Was ist nicht ideal? Ich bin mir nicht sicher, was Sie sonst noch erreichen möchten als das, was Sie bereits haben (außer das Ersetzen von data.dtypes durch data.columns, aber es macht wenig Unterschied).
Melkor.cz

Antworten:



56

Verwenden Sie df.count()diese Option , um die Anzahl der Zeilen abzurufen.


20

Fügen Sie dies Ihrem Code hinzu:

import pyspark
def spark_shape(self):
    return (self.count(), len(self.columns))
pyspark.sql.dataframe.DataFrame.shape = spark_shape

Dann können Sie tun

>>> df.shape()
(10000, 10)

Aber erinnern Sie sich nur daran, dass .count()dies bei sehr großen Tischen, die nicht beibehalten wurden, sehr langsam sein kann.


7
print((df.count(), len(df.columns)))

ist einfacher für kleinere Datensätze.

Wenn der Datensatz jedoch sehr groß ist, besteht ein alternativer Ansatz darin, Pandas und Pfeile zu verwenden, um den Datenrahmen in Pandas df zu konvertieren und die Form aufzurufen

spark.conf.set("spark.sql.execution.arrow.enabled", "true")
spark.conf.set("spark.sql.crossJoin.enabled", "true")
print(df.toPandas().shape)

8
Ist .toPandas nicht eine Aktion? Das heißt: Wird dies nicht die Daten für Ihren Master sammeln und dann Shape aufrufen? Wenn ja, wäre es nicht ratsam, dies zu tun, es sei denn, Sie sind sicher, dass es in das Gedächtnis des Masters passt.
ponadto

2
Wenn der Datensatz sehr groß ist, ist das Sammeln bei Pandas genau das, was Sie NICHT tun möchten. Übrigens: Warum aktivieren Sie dafür Cross Join? Und hilft die Pfeilkonfiguration beim Sammeln für Pandas?
Melkor.cz

3

Ich denke, es gibt keine ähnliche Funktion wie data.shapein Spark. Aber ich werde len(data.columns)eher als verwendenlen(data.dtypes)


5
das gibt Ihnen nur die Anzahl der Spalten. Was ist mit der Anzahl der Zeilen?
JanLauGe
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.