de signature functie van randomSplit () omvat een gewichtslijst en een seed specificatie. De gewichtslijst moet het aantal splitsingen en percentage (bij benadering) in elk specificeren en het zaad is voor reproduceerbaarheid. De verhouding is bij benadering te wijten aan de aard van de manier waarop het wordt berekend.
bijvoorbeeld, de volgende code in Figuur 3 zou DF splitsen in twee dataframes, train_df is 80% en test_df is 20% van het oorspronkelijke dataframe. Door dezelfde waarde te gebruiken voor random seed, verwachten we dat dezelfde gegevenspunten in dezelfde split zitten als we het script opnieuw uitvoeren of de vonk intern de splits herbouwt.
onder de motorkap
het volgende proces wordt herhaald om elk gesplitst gegevensframe te genereren: partitioneren, Sorteren binnen partities, en Bernoulli sampling. Als het oorspronkelijke dataframe niet in de cache is opgeslagen, worden de gegevens opnieuw opgehaald, opnieuw gepartitioneerd en opnieuw gesorteerd voor elke splitberekening. Dit is de bron van potentiële anomalieën. Samenvattend is randomSplit() gelijk aan het uitvoeren van sample() voor elke splitsing waarbij het percentage van de steekproef verandert naarmate de splitsing wordt uitgevoerd. Dit is duidelijk als je de broncode voor randomSplit() in PySpark3 onderzoekt. Deze blog⁴ biedt ook wat meer informatie en visuals over hoe randomSplit() is geïmplementeerd.
laten we een voorbeeld doornemen. Figuur 4 is een diagram van het monster () voor elke splitsing, te beginnen met de 0,80 splitsing.