Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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:DataFrame.join仍在创建重复项_Scala_Apache Spark - Fatal编程技术网

Scala:DataFrame.join仍在创建重复项

Scala:DataFrame.join仍在创建重复项,scala,apache-spark,Scala,Apache Spark,我有两个scala数据帧。尽管遵循给出的例子,我仍然得到了重复的 +----+----+----+-------+ | b1| b2| b3|$$RowId| +----+----+----+-------+ |a1-1|a2-1|a3-1| 1| |a1-2|a2-2|a3-2| 2| |a1-3|a2-3|a3-3| 3| |null|null|null| 8| |null|null|null| 9|

我有两个scala数据帧。尽管遵循给出的例子,我仍然得到了重复的

  +----+----+----+-------+
  |  b1|  b2|  b3|$$RowId|
  +----+----+----+-------+
  |a1-1|a2-1|a3-1|      1|
  |a1-2|a2-2|a3-2|      2|
  |a1-3|a2-3|a3-3|      3|
  |null|null|null|      8|
  |null|null|null|      9|
  |null|null|null|     10|
  +----+----+----+-------+

  +-------+-----+-----+-----+
  |$$RowId|   b1|   b2|   b3|
  +-------+-----+-----+-----+
  |      1| null| null| null|
  |      2| null| null| null|
  |      3| null| null| null|
  |      8| b1-8| b2-8|b3-15|
  |      9| b1-9| b2-9|b3-17|
  |     10|b1-10|b2-10|b3-19|
  +-------+-----+-----+-----+
我想把数据合并成一个数据帧。我使用join如下:

val finalDF = colsToShiftRenamedDF.join(colsToKeepDF, Seq("$$RowId"))
结果是以下数据帧

  +-------+----+----+----+-----+-----+-----+
  |$$RowId|  b1|  b2|  b3|   b1|   b2|   b3|
  +-------+----+----+----+-----+-----+-----+
  |      1|a1-1|a2-1|a3-1| null| null| null|
  |      2|a1-2|a2-2|a3-2| null| null| null|
  |      3|a1-3|a2-3|a3-3| null| null| null|
  |      8|null|null|null| b1-8| b2-8|b3-15|
  |      9|null|null|null| b1-9| b2-9|b3-17|
  |     10|null|null|null|b1-10|b2-10|b3-19|
  +-------+----+----+----+-----+-----+-----+

任何建议

您加入的方式肯定会为您提供每个
,即使它们是
空的
如果不需要副本,则应添加一些附加步骤。

import org.apache.spark.sql.functions._
val finalDF = colsToShiftRenamedDF.as("t1").join(colsToKeepDF.as("t2"), Seq("$$RowId"))
  .select(col("$$RowId"),
    when(col("t1.b1").isNull || col("t1.b1") === "null", col("t2.b1")).otherwise(col("t1.b1")).as("b1"),
    when(col("t1.b2").isNull || col("t1.b2") === "null", col("t2.b2")).otherwise(col("t1.b2")).as("b2"),
    when(col("t1.b3").isNull || col("t1.b3") === "null", col("t2.b3")).otherwise(col("t1.b3")).as("b3"))
这将为您提供输出
dataframe
as

+-------+-----+-----+-----+
|$$RowId|b1   |b2   |b3   |
+-------+-----+-----+-----+
|1      |a1-1 |a2-1 |a3-1 |
|2      |a1-2 |a2-2 |a3-2 |
|3      |a1-3 |a2-3 |a3-3 |
|8      |b1-8 |b2-8 |b3-15|
|9      |b1-9 |b2-9 |b3-17|
|10     |b1-10|b2-10|b3-19|
+-------+-----+-----+-----+

我希望答案是有帮助的

最后我提出了一些类似的想法,但我没有使用join,而是使用了with column,我怀疑这一点会更慢,因为这个过程一次只进行一列。万分感谢!!我的荣幸@Jake,感谢您的接受和投票Ramesh,只有在您可以腾出时间的情况下,才有可能根据要移位的列数(比如b1 bn和a1 an)(其中count bn==count an)使代码动态变化?如果是的话,也许可以作为额外的答案发布。我知道这要求很多,所以如果你很忙,请忽略。我已经感谢你的帮助了,我想这是可能的。如果以前没有人问过,你为什么不再问一个问题呢。如果不是我,其他人会回答。:)好的,我可以单独问一个问题