【问题标题】:SparkR merge without creating duplicate columnsSparkR 合并而不创建重复列
【发布时间】:2016-12-15 08:04:00
【问题描述】:

我决定创建这个问题,因为the answer provided to a very similar 问题不适用于我的场景:

我想合并这两个 SparkR 数据帧 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 列合并。我尝试了上面链接中提出的所有步骤(例如省略“by”语句),但结果总是如下所示:

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 语句的各种组合,但都没有奏效。 有没有一种方法可以通过省略其中一个步骤来简化这个繁琐的校正链?谢谢!

【问题讨论】:

    标签: r apache-spark dataframe merge sparkr


    【解决方案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|
    #+----+----+------+
    

    【讨论】:

      猜你喜欢
      • 2018-09-04
      • 2014-08-18
      • 2019-12-15
      • 2021-05-20
      • 2021-11-12
      • 1970-01-01
      • 2016-10-14
      • 2020-12-04
      • 2017-05-06
      相关资源
      最近更新 更多