Python 在Spark中重命名数据框自联接中的列

Python 在Spark中重命名数据框自联接中的列,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我有一个spark数据框,如下所示: +---+------------+ | id| vectors| +---+------------+ | 0| [1, 2, 3]| | 1|[2, 4, null]| | 2|[3, 2, null]| +---+------------+ 我想做一个笛卡尔连接。但问题是它添加了与右表相同的列名。我想使用笛卡尔连接表来计算连接表的两个向量列的余弦相似性。但是如果列名相同,我将无法在余弦相似性函数中引用它们 所以我试过这个 joine

我有一个spark数据框,如下所示:

+---+------------+
| id|     vectors|
+---+------------+
|  0|   [1, 2, 3]|
|  1|[2, 4, null]|
|  2|[3, 2, null]|
+---+------------+
我想做一个笛卡尔连接。但问题是它添加了与右表相同的列名。我想使用笛卡尔连接表来计算连接表的两个向量列的余弦相似性。但是如果列名相同,我将无法在余弦相似性函数中引用它们

所以我试过这个

joined_df=data_with_keys_df.join(data_with_keys_df.withColumnRenamed('vectors','vectors_2'))
并更改了正确的表向量列名

+---+------------+---+------------+
| id|     vectors| id|   vectors_2|
+---+------------+---+------------+
|  0|   [1, 2, 3]|  0|   [1, 2, 3]|
|  0|   [1, 2, 3]|  1|[2, 4, null]|
|  0|   [1, 2, 3]|  2|[3, 2, null]|
|  1|[2, 4, null]|  0|   [1, 2, 3]|
|  1|[2, 4, null]|  1|[2, 4, null]|
|  1|[2, 4, null]|  2|[3, 2, null]|
|  2|[3, 2, null]|  0|   [1, 2, 3]|
|  2|[3, 2, null]|  1|[2, 4, null]|
|  2|[3, 2, null]|  2|[3, 2, null]|
+---+------------+---+------------+
现在,我可以使用Python Udf创建一个新列,该列与上面的两个向量列具有余弦相似性

但是,我仍然有相同的id列。我不想在加入之前对每个表多次使用WithColumn重命名。那么,有没有一种方法可以在加入时重命名它

我知道sql查询就是这样一种方式,但这需要另外两个步骤来注册数据帧

这可以用DataFrame语法本身来完成,还是sql是最简单的方法(见下文)


我不确定我是否完全理解你的问题。您介意重新格式化这个问题吗?WithColumnRename是通过alias(“as”)语句实现最终查询的方式。如果您想使用大数据上的余弦SimiLabess计算相似度连接,如果数据符合要求,考虑使用DIMSUM。感谢@阿尔伯托BoSANTO来检查用于重命名数据帧列的多个选项的答案。
select a.id as id1, a.vector as vector1, b.id as id2, b.vector as vector2
from df, df