spark java api,数据集操作?

cwxwcias  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(325)

我是新的spark java api。我的数据集包含两列(account,lib)。我想显示具有不同lib的帐户。事实上,我的数据集是这样的。ds1型

  1. +---------+------------+
  2. | account| Lib |
  3. +---------+------------+
  4. | 222222 | bbbb |
  5. | 222222 | bbbb |
  6. | 222222 | bbbb |
  7. | | |
  8. | 333333 | aaaa |
  9. | 333333 | bbbb |
  10. | 333333 | cccc |
  11. | | |
  12. | 444444 | dddd |
  13. | 444444 | dddd |
  14. | 444444 | dddd |
  15. | | |
  16. | 555555 | vvvv |
  17. | 555555 | hhhh |
  18. | 555555 | vvvv |

我想得到这样的ds2:

  1. +---------+------------+
  2. | account| Lib |
  3. +---------+------------+
  4. | | |
  5. | 333333 | aaaa |
  6. | 333333 | bbbb |
  7. | 333333 | cccc |
  8. | | |
  9. | 555555 | vvvv |
  10. | 555555 | hhhh |
cwtwac6a

cwtwac6a1#

如果组较小,则可以使用窗口函数:

  1. import org.apache.spark.sql.functions._
  2. import org.apache.spark.sql.expressions.Window
  3. df
  4. .withColumn("cnt", approx_count_distinct("Lib").over(Window.partitionBy("account")).alias("cnt"))
  5. .where(col("cnt") > 1)

如果组较大:

  1. df.join(
  2. df
  3. .groupBy("account")
  4. .agg(countDistinct("Lib").alias("cnt")).where(col("cnt") > 1),
  5. Seq("account"),
  6. "leftsemi"
  7. )
展开查看全部

相关问题