pyspark笛卡尔联接:重命名重复的列

时间:2019-05-20 07:32:06

标签: pyspark

我有一个pyspark数据框,我想对其进行笛卡尔联接。 我在pyspark中使用了以下功能

# Cross Join
m_f_1 =  m_f_0.withColumnRenamed('value', 'value_x').crossJoin(m_f_0.withColumnRenamed('value', 'value_y')).drop(m_f_0.area).drop(m_f_0.id)

我面临的问题是还有一种列名称类型,我希望在执行交叉联接时将其重命名。怎么做?

m_f_0数据帧为:

     id   value    area type
1: 100003 66007 Unknown  mo
2: 100011 81716 Unknown  mo
3: 100011 68028 Unknown  mo
4: 100018 48358 Unknown  mo

在交叉连接结果之后,我期望以以下格式输出。

id value_x value_y type_x type_y
1: 
2:
3: 

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

import pyspark.sql.functions as F

m_f_x = m_f_0.select([F.col(c).alias('%s_x'%(c)) for c in list(m_f_0.columns)])

m_f_y = m_f_0.select([F.col(c).alias('%s_y'%(c)) for c in list(m_f_0.columns)])

m_f_1 =  (m_f_x.crossJoin(m_f_y).drop(m_f_x.area_x)
.drop(m_f_x.id_x))