我正在尝试将大型.log文件(包含超过六万行)读入内存。我想应用gensim中实现的Word2Vec算法。我尝试过多种解决方案,但似乎都没有。任何帮助将不胜感激。
代码1:
name := "demoSpark"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies ++= Seq("org.apache.spark"% "spark-core_2.11"%"2.1.0",
"org.apache.spark" % "spark-sql_2.10" % "2.1.0",
"org.apache.spark" % "spark-streaming_2.11" % "2.1.0",
"org.apache.spark" % "spark-mllib_2.10" % "2.1.0"
)
代码2:
def file_reader(file_obj):
return [word for line in open(file_obj, 'r') for word in line.split()]
答案 0 :(得分:0)
你需要以某种方式对文件进行分块。由于您的文件是基于行的,因此您可以使用python的普通行分块(即for line in file
)。您遇到的问题是这个
def file_reader(file_obj):
return [word for line in open(file_obj, 'r') for word in line.split()]
将整个文件加载到return语句中。
您需要在读取线条的同时组装矢量,而不是这样做。当你遇到每个单词时,你可以在那里删除停用词和lemitization,如果剩下任何东西,请将它添加到你的向量中。
或者,如果您需要每个单词更多的上下文,请逐句处理。在任何一种情况下,都要在阅读器中进行处理,而不是从文件中收集所有数据然后进行处理。