Как заставить pyspark и ML (без RDD) работать с большим CSV? - PullRequest
0 голосов
/ 29 ноября 2018

Я работаю с относительно большим CSV-файлом и пытаюсь обучить его модели pyspark.ml.classification.LogisticRegression.Код ниже работает хорошо, если образец файла содержит несколько строк (около 200).Однако, если я запускаю тот же код с относительно большим файлом (6e6 строк), у меня есть исключение записи в сокет.Я гуглил это, но не мог найти советПожалуйста, помогите мне с этим исключением с большим файлом:

PySpark socketWrite Exception due to Executor Error

Это код, который дает исключение:

from pyspark.sql import SparkSession
from pyspark.ml.linalg import Vectors
from pyspark.ml.evaluation import BinaryClassificationEvaluator as Evaluator
from pyspark.mllib.regression import LabeledPoint
from pyspark.ml.classification import LogisticRegression
import warnings

spark = SparkSession \
    .builder \
    .appName("Python Spark SQL basic example") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()

warnings.filterwarnings('ignore')

def vectorizeData(data):
    return data.rdd.map(lambda r: [int(r[-1]), Vectors.dense(r[:-1])]).toDF(['label','features'])



in_file = "C:\\Users\\HCAOA911\\Desktop\\data\\small_sample.csv"

CV_data = spark.read.csv(in_file, header=True) 

CV_data = CV_data[['step','amount','oldbalanceOrg','newbalanceOrig',
                'oldbalanceDest','newbalanceDest','isFlaggedFraud', 'isFraud']]
training_data, testing_data = CV_data.randomSplit([0.8, 0.2])

xytrain = vectorizeData(training_data)

lr = LogisticRegression(regParam=0.01)
model = lr.fit(xytrain)

xytest = vectorizeData(testing_data)
predicted_train = model.transform(xytrain)
predicted_test = model.transform(xytest)
evaluator = Evaluator()

print("Train %s: %f" % (evaluator.getMetricName(), evaluator.evaluate(predicted_train)))
print("Test %s: %f" % (evaluator.getMetricName(), evaluator.evaluate(predicted_test)))

Я работаю с

  • spark-submit --master local [*] .py
  • Python 3.6.4
  • Pyspark 2.2.1
  • Windows 7

Заранее спасибо

1 Ответ

0 голосов
/ 29 ноября 2018

Я решил проблему, используя лучшее представление для моделей ML:

https://github.com/iarroyof/dummy_fraud_detection/blob/master/fraud_pysparkML_test.py

В этом примере я использовал объект pyspark.ml.feature.VectorAssembler в функции с именем vectorizeData().

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