我在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更重要,它解释了如何重命名数据帧的所有列,而我的要求是只重命名一个或者几列。
答案 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