Scala 如何连接具有相同列的数据集并选择一个?
我有两个Spark数据帧,我将在之后加入并选择它们。我想选择其中一个数据帧的特定列。但另一个中存在相同的列名。因此,我得到了一个不明确列的例外 我试过这个:Scala 如何连接具有相同列的数据集并选择一个?,scala,apache-spark,join,apache-spark-sql,Scala,Apache Spark,Join,Apache Spark Sql,我有两个Spark数据帧,我将在之后加入并选择它们。我想选择其中一个数据帧的特定列。但另一个中存在相同的列名。因此,我得到了一个不明确列的例外 我试过这个: d1.as("d1").join(d2.as("d2"), $"d1.id" === $"d2.id", "left").select($"d1.columnName") 这是: d1.join(d2, d1("id") === d2("id"), "left").select($"d1.columnName") 但它不起作用 您使用的
d1.as("d1").join(d2.as("d2"), $"d1.id" === $"d2.id", "left").select($"d1.columnName")
这是:
d1.join(d2, d1("id") === d2("id"), "left").select($"d1.columnName")
但它不起作用 您使用的是哪个spark版本?你能放一个数据帧的样本吗? 试试这个:
d2prim = d2.withColumnRenamed("columnName", d2_columnName)
d1.join(d2prim , Seq("id"), "left_outer").select("columnName")
这是因为spark组合两个数据帧中的列时,它不会为您自动重命名。在加入之前,只需重命名其中一列。Spark为此提供了一种方法。连接后,可以删除重命名的列
val df2join = df2.withColumnRenamed("id", "join_id")
val joined = df1.join(df2, $"id" === $"join_id", "left").drop("join_id")
我有两个数据帧
之后我将加入并选择它。
我想选择其中一个数据帧的特定列。但另一个中存在相同的列名
正如你所看到的,它只是工作
那么,为什么它对你不起作用呢?让我们逐一分析
// you started very well
d1.as("d1")
// but here you used $ to reference a column to join on
// with column references by their aliases
// that won't work
.join(d2.as("d2"), $"d1.id" === $"d2.id", "left")
// same here
// $ + aliased columns won't work
.select($"d1.columnName")
PROTIP:使用d1(“columnName”)
引用数据帧中的特定列
另一个查询非常接近,但
d1.join(d2, d1("id") === d2("id"), "left") // <-- so far so good!
.select($"d1.columnName") // <-- that's the issue, i.e. $ + aliased column
d1.join(d2,d1(“id”)==d2(“id”),“left”)//当你说“但它不工作”时,有什么错误/异常?是的,输入错误。我修复了丢失的相等项。此外,已接受的答案在发布后经过编辑以匹配此答案。
// you started very well
d1.as("d1")
// but here you used $ to reference a column to join on
// with column references by their aliases
// that won't work
.join(d2.as("d2"), $"d1.id" === $"d2.id", "left")
// same here
// $ + aliased columns won't work
.select($"d1.columnName")
d1.join(d2, d1("id") === d2("id"), "left") // <-- so far so good!
.select($"d1.columnName") // <-- that's the issue, i.e. $ + aliased column