所以我试图将我的python算法转换为Spark友好代码,而我遇到了麻烦:
indexer = recordlinkage.SortedNeighbourhoodIndex \
(left_on=column1, right_on=column2, window=41)
pairs = indexer.index(df_1,df_2)
它基本上将一列与另一列进行比较,并为可能相同的列生成索引对(记录匹配)。
我的代码:
df1 = spark.read.load(*.csv)
df2 = spark.read.load(*.csv)
func_udf = udf(index.indexer) ????
df = df.withColumn('column1',func_udf(df1.column1,df2.column2)) ???
我一直在使用udf进行仅涉及一个数据帧和一列的转换,但是如何运行需要两个参数的函数,一个数据帧中的一列,而其他数据帧中的另一列?我不能同时加入两个数据帧,因为它们的长度不同。
答案 0 :(得分:1)
udf
的工作方式不是这样。 UserDefinedFunctions
仅可对来自单个DataFrame
的数据进行操作
udf
。pandas_udf
处理单个分区或单个组中的数据。由于两个数据帧的长度不同,我无法将其合并。
加入正是您应该做的(标准或手动广播)。不需要对象具有相同的长度-Spark联接是关系联接,而不是按行合并。
对于相似联接,您可以使用内置的近似联接工具: