Apache Spark永远培训

时间:2018-07-20 20:54:04

标签: apache-spark pyspark apache-spark-sql apache-spark-mllib

我正在使用Apache Spark 2.2,并且正在使用少于100万行的11个功能来训练逻辑回归模型。有些功能的范围可能是0到50,但大多数都接近零。

要训练我正在使用的模型,

title_name=soup.find_all('div',class_='food-description-title')
title_list=[]

for i in range (3,len(title_name)):
    title=title_name[i].text
    title_list.append(title)

要准备数据,我正在做一堆联接过滤器。 尝试在100行数据上训练模型时,大约需要30分钟。 当我保存这100行时,这也需要花费一些时间,因此模型将在几秒钟内完成训练。

我看了这篇文章:

Saving DataFrame to Parquet takes lot of time

我假设我的数据分散在多个服务器上,并且在尝试训练模型时必须收集数据。几乎像运行.collect() 在数据上。但是,我是Spark的新手,所以我可能是错的。

此外,当我整夜运行训练模型时,我遇到了内存不足错误。但是,人们以前在这个集群上使用更大的数据集。

该模型在合理的时间内训练怎么办? 我试图将模型另存为csv,但这花费的时间太长了...

请帮助我。

编辑:

spark2-submit --master yarn --num-executors 100 --conf spark.executor.memory = 64G

lr = LogisticRegression()#maxIter=10, regParam=0.3, elasticNetParam=0.8)
lrModel = lr.fit(data)

当我说保存时,是指另存为csv。

spark = SparkSession.builder \
  .appName("spark session example") \
  .enableHiveSupport() \
  .getOrCreate()

这是我的代码的想法: 我需要根据事件是否在特定日期发生来标记数据。因此,我有一个for循环遍历所有工作日,并过滤该日期之后的过去30天。

过滤一个: 我过滤了特定的工作日

过滤两个 我在那个工作日之前过滤了30天 过滤三个 我在那个工作日之前过滤了14天

过滤四个 我在那个工作日之前过滤了7天

加入一个人 我根据isin互相加入7天,14天和30天表格 加入两个 我用标签将上面的联接表连接起来。我将空值替换为零。

然后我使用VectorAssembler,并将这些表中的每一个合并到for循环外的变量。

完成所有这些操作后,我会有打印声明。因此,花费大量时间的部分是训练模型。我将100行数据保存到一个耗时很长的csv中,然后将其上传并用于训练模型。当我上传并训练模型时,整个过程花了一分钟。

当我尝试使用100行数据直接训练模型时,训练部分需要30分钟。

数据在训练之前的外观:

training_dataframe.coalesce(1).write.format('com.databricks.spark.csv').save('file/path/file.csv', header = 'true')

0 个答案:

没有答案