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

时间:2017-12-26 09:48:50

标签: apache-spark parallel-processing spark-dataframe user-defined-functions

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函数时有这种行为。任何想法为什么并行执行不适用于实际案例? 谢谢。

0 个答案:

没有答案