如何使 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 一起工作?的主要内容,如果未能解决你的问题,请参考以下文章

PySpark ML——分布式机器学习库

删除 RDD、Pyspark 中的停用词

PySpark:将 RDD 转换为数据框中的列

将 RDD 转换为列联表:Pyspark

PySpark 中的回归。使用哪个库[重复]

使 Spark 结构化流中的 JSON 可以在 python (pyspark) 中作为没有 RDD 的数据帧访问