当前位置: 首页 > 知识库问答 >
问题:

执行连接时更新Spark - Scala中的数据帧列名

漆雕奇逸
2023-03-14

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

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

编辑

我浏览了类似的帖子,如下所示。但是我看不到我问题的答案。

在spark中更新数据帧列

在Spark scala中重命名数据帧的列名

这篇文章中的答案是:Spark Dataframe区分具有重复名称的列与我无关,因为它与pyspark比Scala更相关,它解释了如何重命名Dataframe的所有列,而我的要求是只重命名一列或几列。

共有2个答案

秦俊发
2023-03-14

您可以. 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"))

或者您可以使用< code >。别名为

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"))
暨嘉
2023-03-14

如果要重命名数据集的列,则数据集来自联接的事实不会改变任何内容。你可以尝试这个答案中的任何例子,例如:

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")
 类似资料:
  • 我有两个火花数据帧和。在连接这两个数据流的同时,是否有一种方法可以动态地选择输出列?在内部连接的情况下,下面的定义输出来自df1和df2的所有列。 DfJoinResult.Schema(): 我查看了等选项,但它不允许从两个DF中选择列。有没有一种方法可以动态地传递列以及我们想要在我的中从中选择的数据帧详细信息?我使用的是Spark2.2.0。

  • 我正在尝试连接两个apache spark sql DataFrame,并将第一个数据帧的列值替换为另一个。如: 我需要执行左连接并将 DF1.col1 的值替换为 DF2.col3,其中 DF1.col1 = DF2.col1。我不知道该怎么做。此外,如上例所示,DF1 除了“col1”和“col2”之外还有更多列,我无法对所有列都应用 select。我正在尝试类似的东西, 但这似乎行不通。另外

  • 有很多关于这个问题的帖子,但没有一个回答我的问题。 在尝试将许多不同的数据帧连接在一起时,我在PySpark中遇到了<code>OutOfMemoryError 我的本地机器有16GB内存,我已将Spark配置设置为: 关于Spark中OOM错误的SO帖子显然很多很多,但基本上大多数都是说增加你的内存属性。 我实际上是对50-60个较小的数据帧执行连接,这些数据帧有两列< code>uid和< c

  • 我有两个数据帧和包含IP地址,我正在尝试将IP地址映射到地理位置信息,如经度和纬度,它们是中的列。 我运行它作为一个火花提交作业,但操作花了很长时间,即使只有不到2500行。 我的代码: 有没有其他方法可以加入这两张桌子?还是我做错了?

  • 我得到以下错误:org.apache.spark.sql.analysisException:不允许在另一个聚合函数的参数中使用聚合函数。请在子查询中使用内部聚合函数。;; 我尝试了多种解决方案来解决这个问题,但似乎没有任何效果。所有的想法都得到了赞赏。谢了!

  • 我正在考虑将dataset1分解为每个“T”类型的多个记录,然后与DataSet2连接。但是你能给我一个更好的方法,如果数据集变大了,它不会影响性能吗?