如何使 pyspark 和 ML(无 RDD)与大型 csv 一起工作?
Posted
技术标签:
【中文标题】如何使 pyspark 和 ML(无 RDD)与大型 csv 一起工作?【英文标题】:How do I make pyspark and ML (no RDD) working with large csv? 【发布时间】:2018-11-29 01:00:26 【问题描述】:我正在处理一个相对较大的 CSV 文件,并尝试用它训练一个 pyspark.ml.classification.LogisticRegression
模型。如果示例文件包含几行(大约 200 行),则下面的代码运行良好。但是,如果我使用实际相对较大的文件(6e6 行)运行相同的代码,我会遇到套接字写入异常。我已经用谷歌搜索了它,但我找不到一些建议。请帮助我处理大文件的异常:
这是给出异常的代码:
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】:我已经通过对 ML 模型使用更好的表示来解决这个问题:
https://github.com/iarroyof/dummy_fraud_detection/blob/master/fraud_pysparkML_test.py
在本例中,我在一个名为 vectorizeData()
的函数中使用了对象 pyspark.ml.feature.VectorAssembler
。
【讨论】:
以上是关于如何使 pyspark 和 ML(无 RDD)与大型 csv 一起工作?的主要内容,如果未能解决你的问题,请参考以下文章