将熊猫转换为Pyspark

时间:2018-07-25 22:05:57

标签: pyspark

所以我试图将我的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进行仅涉及一个数据帧和一列的转换,但是如何运行需要两个参数的函数,一个数据帧中的一列,而其他数据帧中的另一列?我不能同时加入两个数据帧,因为它们的长度不同。

1 个答案:

答案 0 :(得分:1)

udf的工作方式不是这样。 UserDefinedFunctions仅可对来自单个DataFrame的数据进行操作

  • 关于来自一行的数据的标准udf
  • pandas_udf处理单个分区或单个组中的数据。
  

由于两个数据帧的长度不同,我无法将其合并。

加入正是您应该做的(标准或手动广播)。不需要对象具有相同的长度-Spark联接是关系联接,而不是按行合并。

对于相似联接,您可以使用内置的近似联接工具: