将 DataFrame 拆分为两个 DataFrame

Ati*_*zad 1 scala apache-spark

我有一个日期框架,其中有基于数字的唯一记录和重复记录。现在我想将数据帧分成两个数据帧。在第一个数据帧中,我只需要复制唯一的行,在第二个数据帧中,我想要所有重复的行。例如

     id   name     number
     1    Shan     101
     2    Shan     101
     3    John     102
     4    Michel   103
Run Code Online (Sandbox Code Playgroud)

两个分割的数据框应该像

独特的

      id    name    number
      3     John    102
      4     Michel  103
Run Code Online (Sandbox Code Playgroud)

重复

      id   name     number
      1    Shan     101
      2    Shan     101
Run Code Online (Sandbox Code Playgroud)

小智 5

您尝试过的解决方案可能可以帮助您实现这一目标。

你的数据看起来像这样

val df = sc.parallelize(Array(
     (1, "Shan",     101),
     (2, "Shan", 101),
     (3, "John", 102),
     (4, "Michel", 103)
     )).toDF("id","name","number")
Run Code Online (Sandbox Code Playgroud)

然后你自己建议分组和计数。如果你这样做

 val repeatedNames = df.groupBy("name").count.where(col("count")>1).withColumnRenamed("name","repeated").drop("count")
Run Code Online (Sandbox Code Playgroud)

那么你实际上可以通过之后做这样的事情来获得所有的方法:

 val repeated = df.join(repeatedNames, repeatedNames("repeated")===df("name")).drop("repeated")

 val distinct = df.except(repeated)

 repeated show
+---+----+------+
| id|name|number|
+---+----+------+
|  1|Shan|   101|
|  2|Shan|   101|
+---+----+------+

 distinct show
+---+------+------+
| id|  name|number|
+---+------+------+
|  4|Michel|   103|
|  3|  John|   102|
+---+------+------+
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。