Spark DataFrame已针对并行执行进行了优化(并行执行在后台处理),但以下UDF函数 申请Spark DataFrame列的数据处理作为单个流程运行:
def ComputeSimilarityValue(article_sample):
max_sum = .0
for keyword in keywords_string.split(' '):
if keyword in model_vocab:
max_sum += max([model.similarity(keyword, w) for w in article_sample.split(' ')])
if not max_sum:
max_sum /= float( len(keywords_string.split(' ')) )
return max_sum
udf_ComputeSimilarityValue = udf(ComputeSimilarityValue, DoubleType())
df_a_p = df_a_p.withColumn("SimilarityValue", udf_ComputeSimilarityValue("article_sample_processed"))
model
是Word2Vec对象(训练模型),它应返回给定keyword
与提供的article_sample
的实际单词之间的相似度值(article_sample
从Spark DataFrame的article_sample_processed
列开始。
图1是CPU的屏幕截图: CPU when the UDF-function above is running
我第一次使用UDF函数时有这种行为。任何想法为什么并行执行不适用于实际案例? 谢谢。