我有一个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:
答案 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))