случайная выборка из фрейма данных в pyspark - PullRequest
0 голосов
/ 26 сентября 2019

В моем наборе данных у меня 73 миллиарда строк.Я хочу применить алгоритм классификации к нему.Мне нужен образец из исходных данных, чтобы я мог проверить свою модель.

Я хочу провести разделение теста на поезд.

Структура данных выглядит как -

id    age   gender    salary    bonus  area   churn
1      38    m        37654      765    bb     1
2      48    f        3654       365    bb     0
3      33    f        55443      87     uu     0
4      27    m        26354      875    jh     0
5      58    m        87643      354    vb     1

Как сделать случайную выборку, используя pyspark, чтобы мой зависимый (отток) рацион переменной не изменился.Любое предложение?

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Примеры вы найдете в связанной документации.

Spark поддерживает Стратифицированная выборка .

# an RDD of any key value pairs
data = sc.parallelize([(1, 'a'), (1, 'b'), (2, 'c'), (2, 'd'), (2, 'e'), (3, 'f')])

# specify the exact fraction desired from each key as a dictionary
fractions = {1: 0.1, 2: 0.6, 3: 0.3}

approxSample = data.sampleByKey(False, fractions)

Вы также можете использовать TrainValidationSplit

Например:

from pyspark.ml.evaluation import RegressionEvaluator
from pyspark.ml.regression import LinearRegression
from pyspark.ml.tuning import ParamGridBuilder, TrainValidationSplit

# Prepare training and test data.
data = spark.read.format("libsvm")\
    .load("data/mllib/sample_linear_regression_data.txt")
train, test = data.randomSplit([0.9, 0.1], seed=12345)

lr = LinearRegression(maxIter=10)

# We use a ParamGridBuilder to construct a grid of parameters to search over.
# TrainValidationSplit will try all combinations of values and determine best model using
# the evaluator.
paramGrid = ParamGridBuilder()\
    .addGrid(lr.regParam, [0.1, 0.01]) \
    .addGrid(lr.fitIntercept, [False, True])\
    .addGrid(lr.elasticNetParam, [0.0, 0.5, 1.0])\
    .build()

# In this case the estimator is simply the linear regression.
# A TrainValidationSplit requires an Estimator, a set of Estimator ParamMaps, and an Evaluator.
tvs = TrainValidationSplit(estimator=lr,
                           estimatorParamMaps=paramGrid,
                           evaluator=RegressionEvaluator(),
                           # 80% of the data will be used for training, 20% for validation.
                           trainRatio=0.8)

# Run TrainValidationSplit, and choose the best set of parameters.
model = tvs.fit(train)

# Make predictions on test data. model is the model with combination of parameters
# that performed best.
model.transform(test)\
    .select("features", "label", "prediction")\
    .show()
0 голосов
/ 26 сентября 2019

Чтобы увидеть образец из исходных данных, мы можем использовать образец в искре:

df.sample (фракция) .show ()

Дробь должна быть между [0.0, 1.0]

пример:

df.sample (0.2) .show (10) -> несколько раз введите эту команду, она покажет разные образцы ваших исходных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...