Spark DataFrame列上的UDF函数:并行执行

问题描述 投票:1回答:1

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_samplearticle_sample_processed列Spark DataFrame)。

图1是CPU的屏幕截图:CPU when the UDF-function above is running

这不是我第一次使用UDF函数具有这种行为。有什么想法为什么并行执行不应用于实际情况?谢谢。

apache-spark parallel-processing spark-dataframe user-defined-functions
1个回答
0
投票

面临类似的问题,我有一个很大的数据框,我在上面使用了带列的udf函数,但没有并行完成。您是否找到了在pyspark中并行化udf函数的方法?

© www.soinside.com 2019 - 2024. All rights reserved.