2016-08-09 3 views
3

я решил создать этот вопрос, потому что the answer provided to a very similar проблема не работает для моего сценария:SparkR слияние без создания дубликатов столбцов

Я хочу, чтобы объединить эти два SparkR dataframes df1

col1 col2  
1  11  
2  22  
3  33  
4  44 

и df2

col1 col2 newcol 
1  11  401 
2  22  402 
3  33  403 
4  44  404 

dfs следует объединить в столбцы 1 и 2. Я пробовал все шаги, предложенные в приведенной выше ссылке (например, опускание «по выражению»), но результат всегда выглядит l икэ это:

col1_x col2_x col1_y col2_y newcol 
1  11  1  11  401 
2  22  2  22  402 
3  33  3  33  403 
4  44  4  44  404 

Я не хочу иметь повторяющиеся столбцы и сейчас я должен удалить col1_y, col2_y вручную и переименовать col1_x, col2_x только иметь col1, col2 и NEWCOL как результат:

df <- merge(df1, df2) # <- how can I change this? 
df$col1_y <- NULL 
df$col2_y <- NULL 
df <- withColumnRenamed(df, "col1_x", "col1") 
df <- withColumnRenamed(df, "col2_x", "col2") 

Я пробовал всевозможные комбинации, используя инструкции by by.x и by.y, но никто не работал. Есть ли способ упростить эту утомительную цепь коррекции, опуская один из шагов? Спасибо!

ответ

1

Это ожидаемое поведение, один из вариантов является select() соответствующих столбцов из полученного DataFrame:

library(magrittr) 

# We'll use join to avoid suffixes '_x' & '_y' 
join(df1,df2,(df1$col1==df2$col1)&(df1$col2==df2$col2)) %>% 
    select(df1$col1,df1$col2,df2$newcol) %>% 
    showDF() 
#+----+----+------+ 
#|col1|col2|newcol| 
#+----+----+------+ 
#| 1|11.0| 401| 
#| 2|22.0| 402| 
#| 3|33.0| 403| 
#| 4|55.0| 404| 
#+----+----+------+ 
+0

Великий, присоединиться и трубы выбрать делает трюк. –