java - Spark Java API,数据集操作?

标签 java apache-spark hadoop hdfs

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

 +---------+------------+
    |  account|    Lib     |
    +---------+------------+
    | 222222  |  bbbb      |
    | 222222  |  bbbb      |
    | 222222  |  bbbb      |
    |         |            |
    | 333333  |  aaaa      |
    | 333333  |  bbbb      |
    | 333333  |  cccc      |
    |         |            |
    | 444444  |  dddd      |
    | 444444  |  dddd      |
    | 444444  |  dddd      |
    |         |            |
    | 555555  |  vvvv      |
    | 555555  |  hhhh      |
    | 555555  |  vvvv      |

我想得到这样的 ds2:

+---------+------------+
|  account|    Lib     |
+---------+------------+
|         |            |
| 333333  |  aaaa      |
| 333333  |  bbbb      |
| 333333  |  cccc      |
|         |            |
| 555555  |  vvvv      |
| 555555  |  hhhh      |

最佳答案

如果组很小,您可以使用窗口函数:

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


df
  .withColumn("cnt", approx_count_distinct("Lib").over(Window.partitionBy("account")).alias("cnt"))
  .where(col("cnt") > 1)

如果群体很大:

df.join(
  df
   .groupBy("account")
   .agg(countDistinct("Lib").alias("cnt")).where(col("cnt") > 1),
  Seq("account"),
  "leftsemi"
)

关于java - Spark Java API,数据集操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50644014/

相关文章:

java - Observable<List<Object>> 无法转换为 Observable<List<Anime>>

java - 需要一个同时支持mysql和oracle的例子

apache-spark - 如何拆分一个巨大的rdd并轮流广播?

sql - “Hive” 多列的最大列值

hadoop - Cassandra pig 插入异常

java - int 在 Sun 的 64 位 JVM 上占用多少内存?

java - 如何对类型为 "NameOfClass"的数组进行排序

scala - 如何在Spark Shell中运行外部jar函数

scala - Spark 上的序列化异常

hadoop - 在 Amazon EMR 上运行 Pig 字数统计脚本时出现错误