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
从article_sample_processed
列Spark DataFrame)。
图1是CPU的屏幕截图:CPU when the UDF-function above is running
这不是我第一次使用UDF函数具有这种行为。有什么想法为什么并行执行不应用于实际情况?谢谢。
面临类似的问题,我有一个很大的数据框,我在上面使用了带列的udf函数,但没有并行完成。您是否找到了在pyspark中并行化udf函数的方法?