首页 文章

在执行连接时更新Spark - Scala中的Dataframe列名

提问于
浏览
0

我在Apache Spark 2.1.0中有两个数据帧aaa_01和aaa_02 .

我在这两个数据帧上执行内连接,从两个数据帧中选择几个列,以显示在输出中 .

Join工作得非常好,但输出数据帧具有输入数据帧中存在的列名 . 我被困在这里 . 我需要有新的列名而不是在输出数据帧中获得相同的列名 .

示例代码在下面给出以供参考

DF1.alias("a").join(DF2.alias("b"),DF1("primary_col") === DF2("primary_col"), "inner").select("a.col1","a.col2","b.col4")

我得到输出数据帧的列名为“col1,col2,col3” . 我试着修改下面的代码,但是徒劳无功

DF1.alias("a").join(DF2.alias("b"),DF1("primary_col") === DF2("primary_col"), "inner").select("a.col1","a.col2","b.col4" as "New_Col")

任何帮助表示赞赏 . 提前致谢 .

Edited

我浏览并得到了类似的帖子,如下所示 . 但我没有看到我的问题的答案 .

Updating a dataframe column in spark

Renaming Column names of a Data frame in spark scala

这篇文章中的答案:Spark Dataframe distinguish columns with duplicated name与我无关,因为它更多地与pyspark相关而不是Scala,它解释了如何重命名数据帧的所有列,而我的要求是只重命名一列或几列 .

2 回答

  • 2

    您想要重命名数据集的列,您的数据集来自连接的事实不会更改任何内容 . 你可以试试this answer中的任何一个例子,例如:

    DF1.alias("a").join(DF2.alias("b"),DF1("primary_col") === DF2("primary_col"), "inner")
        .select("a.col1","a.col2","b.col4")
        .withColumnRenamed("col4","New_col")
    
  • 1

    你可以 .as 别名

    import sqlContext.implicits._
    DF1.alias("a").join(DF2.alias("b"),DF1("primary_col") === DF2("primary_col"), "inner").select($"a.col1".as("first"),$"a.col2".as("second"),$"b.col4".as("third"))
    

    或者您可以使用 .alias 作为

    import sqlContext.implicits._
    DF1.alias("a").join(DF2.alias("b"),DF1("primary_col") === DF2("primary_col"), "inner").select($"a.col1".alias("first"),$"a.col2".alias("second"),$"b.col4".alias("third"))
    

    如果您只想更新一个列名,那么您可以这样做

    import sqlContext.implicits._
    DF1.alias("a").join(DF2.alias("b"),DF1("primary_col") === DF2("primary_col"), "inner").select($"a.col1", $"a.col2", $"b.col4".alias("third"))
    

相关问题