如何获得Spark中加入导致的行数

考虑以下两个数据框:

+---+
|id |
+---+
|1  |
|2  |
|3  |
+---+


+---+-----+
|idz|word |
+---+-----+
|1  |bat  |
|1  |mouse|
|2  |horse|
+---+-----+

我正在做Left join on ID=IDZ

val r = df1.join(df2,(df1("id") === df2("idz")),"left_outer").
      withColumn("ID_EMPLOYE_VENDEUR",when(col("word") =!= ("null"),col("word")).otherwise(null)).drop("word")

r.show(false)

+---+----+------------------+
|id |idz |ID_EMPLOYE_VENDEUR|
+---+----+------------------+
|1  |1   |mouse             |
|1  |1   |bat               |
|2  |2   |horse             |
|3  |null|null              |
+---+----+------------------+

但是,如果我只想保留ID只有一个等于IDZ的行怎么办?如果没有,我想在ID_EMPLOYE_VENDEUR中使用null。所需的输出是:

+---+----+------------------+
|id |idz |ID_EMPLOYE_VENDEUR|
+---+----+------------------+
|1  |1   |null              | --Because the Join resulted two different lines
|2  |2   |horse             |
|3  |null|null              |
+---+----+------------------+

我应该指出,我正在开发大型DF。该解决方案在时间上应该不是很昂贵。

谢谢

cathylia 回答:如何获得Spark中加入导致的行数

您可以轻松检索两个以上的 date value type pct 0 2013-01-31 3.0 a NaN 1 2013-02-28 3.5 a 0.166667 2 2013-03-31 -5.0 a -1.130 3 2013-04-30 2.0 b NaN 4 2013-05-31 7.0 b 2.500000 5 2013-06-30 6.8 b 1.24 的{​​{1}}与单个df2的{​​{1}}与groupBy和一个联接相匹配的信息。

idz

注意: groupBy和联接都不会触发任何其他交换步骤(网络上的随机播放),因为数据帧df1已在{ {1}}(因为这是在id上加入的结果)。

,

按照您提到的数据,您的数据太大,因此groupBy并不是对数据进行分组并按以下方式加入 Windows over function 的好选择:

import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._

def windowSpec = Window.partitionBy("idz")

val newDF = df1.withColumn("count",count("idz").over(windowSpec)).dropDuplicates("idz").withColumn("word",when(col("count") >=2,lit(null)).otherwise(col("word"))).drop("count")

val r = df1.join(newDF,(df1("id") === newDF("idz")),"left_outer").withColumn("ID_EMPLOYE_VENDEUR",when(col("word") =!= ("null"),col("word")).otherwise(null)).drop("word") 
 r show 
+---+----+------------------+
| id| idz|ID_EMPLOYE_VENDEUR|
+---+----+------------------+
|  1|   1|              null|
|  3|null|              null|
|  2|   2|             horse|
+---+----+------------------+
本文链接:https://www.f2er.com/3160095.html

大家都在问