pyspark cartesian join: переименование повторяющихся столбцов - PullRequest
0 голосов
/ 20 мая 2019

У меня есть фрейм данных 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 Ответ

1 голос
/ 20 мая 2019

Попробуйте что-то вроде этого:

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...