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)
希望能帮助到你。