我确实尝试在pyspark和pandas_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})