Python 如何在pyspark上修复TF.IDF函数?
我正试图通过MapReduce(平台是Databricks)在pyspark上开发TF.IDF进程。因为我对pyspark、Databricks以及MapReduce的整个过程都是新手,所以我遇到了一些语法问题,我无法解决 以下是我尝试运行的代码:Python 如何在pyspark上修复TF.IDF函数?,python,apache-spark,pyspark,mapreduce,Python,Apache Spark,Pyspark,Mapreduce,我正试图通过MapReduce(平台是Databricks)在pyspark上开发TF.IDF进程。因为我对pyspark、Databricks以及MapReduce的整个过程都是新手,所以我遇到了一些语法问题,我无法解决 以下是我尝试运行的代码: full_text=sc.wholeTextFiles(“/FileStore/tables/full_text.txt”,5) 文档数量=全文。计数() 进口稀土 def标记化: 返回重新拆分(\\W+,s.lower()) #标记文本 token
full_text=sc.wholeTextFiles(“/FileStore/tables/full_text.txt”,5)
文档数量=全文。计数()
进口稀土
def标记化:
返回重新拆分(\\W+,s.lower())
#标记文本
tokenized_text=full_text.map(lambda text,title:(title,tokenize(text)))
#计算每个文档中的字数
term_frequency=tokenized_text.flatMapValues(lambda x:x).countByValue()
term_frequency.items()[:20]#显示20行
document_frequency=tokenized_text.flatMapValues(lambda x:x).distinct()\
.map(lambda title,word:(word,title)).countByKey()
文档\u频率.items()[:10]
将numpy作为np导入
def tf_idf(文档数量、术语频率、文档频率):
结果=[]
对于键,tf.items()中的值:
doc=键[0]
术语=键[1]
df=文件频率[术语]
如果(df>0):
tf_idf=浮点(值)*np.log(文档数/df)
追加({“doc”:doc,“score”:tf_idf,“term”:term})
返回结果
tf_idf_输出=tf_idf(文档数量、术语频率、文档频率)
tf_idf_输出[:10]
问题在于:
term_frequency = tokenized_text.flatMapValues(lambda x: x).countByValue()
错误:作业因阶段失败而中止:阶段1.0中的任务0失败1次,最近的失败:阶段1.0中的任务0.0丢失(TID 1、本地主机、执行器驱动程序)
我非常感谢您的帮助,因为我不知道如何解决这个问题:(
非常感谢
map
采用一元(单参数)函数。您要传递的是二进制(双参数)函数
回到Python的第2天,有lambdas
支持的元组参数解包
今天,你应该选择
lambda tt: (tt[0], tokenize(tt[1]))
或者最好使用适当的功能:
def tuple_tokenizer(title_and_text):
title, text = title_and_text
return title, tokenize(text)
lambda tt: (tt[0], tokenize(tt[1]))
def tuple_tokenizer(title_and_text):
title, text = title_and_text
return title, tokenize(text)