Dataframe-Beispiel in Apache spark | Scala

8

Ich versuche, Proben aus zwei Datenrahmen herauszunehmen, wobei ich das Verhältnis der Anzahl beibehalten muss. zB

%Vor%

Ich möchte die Daten so abtasten, dass ich 10 Proben der Größe 101 bekomme (1 von df1 und 100 von df2)

Jetzt währenddessen

%Vor%

Was bedeutet der Bruch hier? kann es größer als 1 sein? Ich überprüfte dies und dies aber nicht in der Lage war, es vollständig zu verstehen .

Gibt es auch noch die Anzahl der Zeilen, die abgetastet werden sollen?

    
hbabbar 24.05.2016, 14:42
quelle

5 Antworten

15

Der Parameter fraction repräsentiert den ungefähren Bruchteil des Datasets, der zurückgegeben wird. Wenn Sie beispielsweise 0.1 festlegen, werden 10% (1/10) der Zeilen zurückgegeben. Für Ihren Fall glaube ich, dass Sie Folgendes tun möchten:

%Vor%

Sie werden jedoch feststellen, dass newSample.count bei jeder Ausführung eine andere Zahl zurückgibt, und zwar deshalb, weil fraction ein Schwellenwert für einen zufällig generierten Wert ist (wie Sie sehen können, hier ), so dass die resultierende Datenmenge variieren kann. Eine Abhilfe kann sein:

%Vor%

Einige Skalierbarkeitsbeobachtungen

Sie können feststellen, dass die Ausführung von df1.count möglicherweise sehr teuer ist, da der gesamte DataFrame ausgewertet wird und Sie einen der Vorteile von Sampling überhaupt verlieren.

Je nach Kontext Ihrer Anwendung sollten Sie daher eine bereits bekannte Anzahl von Gesamtproben oder eine Approximation verwenden.

%Vor%

Wenn Sie die Größe Ihres DataFrame als sehr groß betrachten, würde ich immer noch fraction verwenden und limit verwenden, um die Anzahl der Samples zu erzwingen.

%Vor%

Was Ihre Fragen angeht:

  

kann es größer als 1 sein?

Nein. Es stellt einen Bruch dar, also muss es eine Dezimalzahl zwischen 0 und 1 sein. Wenn Sie es auf 1 setzen, wird es 100% der Zeilen bringen, daher wäre es nicht sinnvoll, es auf eine Zahl größer als 1 zu setzen / p>

  

Gibt es auch noch die Anzahl der Zeilen, die abgetastet werden sollen?

Sie können einen größeren Bruch als die Anzahl der gewünschten Zeilen angeben und dann Limit verwenden, wie ich im zweiten Beispiel zeige. Vielleicht gibt es einen anderen Weg, aber das ist der Ansatz, den ich verwende.

    
Daniel de Paula 24.05.2016, 16:06
quelle
3

Um zu beantworten, ob der Bruchteil größer als 1 sein kann. Ja, kann es sein, wenn wir ja ersetzen. Wenn ein Wert größer als 1 mit replace false angegeben wird, wird folgende Ausnahme auftreten:

%Vor%     
Aanish 03.12.2016 17:04
quelle
2

Ich finde auch das Fehlen von Abtastwerten durch Zählung der Funktionalität störend. Wenn Sie beim Erstellen einer temporären Ansicht nicht wählerisch sind, finde ich den folgenden Code nützlich (df ist Ihr Dataframe, Anzahl ist die Stichprobengröße):

%Vor%

Gibt eine genaue Anzahl zurück, solange Ihre aktuelle Zeilenanzahl so groß ist wie Ihre Stichprobengröße.

    
Oytun 17.04.2017 17:48
quelle
0

Ich benutze diese Funktion für Stichproben, wenn die genaue Anzahl der Datensätze wünschenswert ist:

%Vor%     
Tagar 21.03.2018 18:10
quelle
-1

Vielleicht möchten Sie den folgenden Code ausprobieren ..

%Vor%     
Sudhakar Chavan 13.10.2016 08:37
quelle

Tags und Links