【发布时间】:2018-01-08 10:58:17
【问题描述】:
我一直在尝试在大型数据库 (30GB) 上训练朴素贝叶斯分类器。 由于内存限制,我必须将数据库查询拆分为多个批次。
我正在使用如下所示的管道:
categoryIndexer = StringIndexer(inputCol="diff", outputCol="label")
tokenizer = Tokenizer(inputCol="text", outputCol="raw")
remover = StopWordsRemover(inputCol="raw", outputCol="words")
hashingTF = HashingTF(inputCol="words", outputCol="features", numFeatures=100000)
nb = NaiveBayes(smoothing=1.0, modelType="multinomial")
pipeline = Pipeline(stages=[categoryIndexer, tokenizer, remover, hashingTF, nb])
然后在 for 循环中使用 fit。
for i in range(0,365):
df = sqlContext.read.jdbc(url=url,table="(SELECT text, diff FROM tweets INNER JOIN djitf ON tweets.created = djitf.day WHERE id > "+ str(i*1000000)+ "AND id <"+ str((i+1)*1000000)+") as table1", properties=properties)
train_data, test_data = df.randomSplit([0.8, 0.2])
model = pipeline.fit(train_data)
但是,我的结果表明,每次我在管道上调用 fit 函数时,模型都会被覆盖。如何保留已经拟合的数据,然后添加?
是否有参数或我缺少的东西?例如在 Sklearn 中有 partial_fit 方法
【问题讨论】:
标签: python apache-spark jdbc pyspark pyspark-sql