Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何连接具有相同列的数据集并选择一个?_Scala_Apache Spark_Join_Apache Spark Sql - Fatal编程技术网

Scala 如何连接具有相同列的数据集并选择一个?

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") 但它不起作用 您使用的

我有两个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")

但它不起作用

您使用的是哪个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