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?
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:
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:
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.
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.
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.
Vielleicht möchten Sie den folgenden Code ausprobieren ..
%Vor%Tags und Links apache-spark dataframe sample