0

我确实尝试在pysparkpandas_on_spark ( koalas ) 中实现此名称匹配 余弦相似度方法/函数get_matches_df并努力优化此函数(我确实尝试避免为数据帧转换toPandas()因为会重载驱动程序所以我想优化此函数并对其进行扩展,因此基本上批处理方法将像本示例一样完美运行,或者使用 pandas_udfs 或采用 1 个向量和 2 个数据帧的简单 UDF:

>>> psdf = ps.DataFrame({'a': [1,2,3], 'b':[4,5,6]})
>>> def pandas_plus(pdf):
...     return pdf[pdf.a > 1]  # allow arbitrary length
...
>>> psdf.pandas_on_spark.apply_batch(pandas_plus)

这是我正在优化的功能(我转换并创建了自定义tfidfvectorizer缩放余弦pyspark sparsematrix 生成器的所有其他功能,我剩下要优化的就是这部分(因为使用 loc 并且不确定如何工作,我不介意让它表现得像熊猫,也就是驱动程序的所有数据帧,但理想情况下是

def get_matches_df(sparse_matrix, name_vector, top=100):
    non_zeros = sparse_matrix.nonzero()
    
    sparserows = non_zeros[0]
    sparsecols = non_zeros[1]
    
    if top:
        nr_matches = top
    else:
        nr_matches = sparsecols.size
    
    left_side = np.empty([nr_matches], dtype=object)
    right_side = np.empty([nr_matches], dtype=object)
    similairity = np.zeros(nr_matches)
    
    for index in range(0, nr_matches):
        left_side[index] = name_vector[sparserows[index]]
        right_side[index] = name_vector[sparsecols[index]]
        similairity[index] = sparse_matrix.data[index]
    
    return pd.DataFrame({'left_side': left_side,
                          'right_side': right_side,
                           'similairity': similairity})
4

0 回答 0