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

时间:2017-08-23 09:41:29

标签: scala apache-spark spark-dataframe

我在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")

感谢任何帮助。提前谢谢。

被修改

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

Updating a dataframe column in spark

Renaming Column names of a Data frame in spark scala

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

2 个答案:

答案 0 :(得分:3)

您想要重命名数据集的列,您的数据集来自连接的事实不会改变任何内容。你可以试试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 :(得分:2)

你可以StringHelper.concatenateValues( Object o1, Object o2, Object o3 ){ return concatenateValues( o1.toString, o2.toString, o3.toString ); } 别名为

db.test_users.remove({"_id": ObjectId("4d512b45cc9374271b02ec4f")})

或者您可以使用.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