получить количество отличных значений для нескольких столбцов из Dataframe, используя Spark и Java8 - PullRequest
0 голосов
/ 15 октября 2019

Я хочу получить количество отличных значений для нескольких столбцов из Dataframe с использованием Spark и Java8

Входной DataFrame - Необходимо написать код для динамических столбцов - Столбцы могут быть добавлены позже

+----+----+----+
|Col1|Col2|Col3|
+----+----+----+
|A1|Y|B2|Y|C3|Y|
|A1|Y|B2|N|C3|Y|
|A1|Y|B2|Y|C3|N|
+----+----+----+

Выходной DateFrame

+--------+---------------------+--------------------+
|Col1    | Col2                | Col3               |
+--------+---------------------+--------------------+
|A1|Y - 3| B2|Y - 2 & B2|N - 1 | C3|Y - 3 & C3|N -1 |
+----+----+----+----+----+----+----+----+----+------+

1 Ответ

0 голосов
/ 15 октября 2019

Может быть, это может помочь вам немного, в scala с использованием rdd, но в java должно быть очень похоже.

  val df = Seq(("a", "a", "a"), ("a", "b", "c"), ("b", "b", "c")).toDF("Col1","Col2","Col3")
  df.show()

  val ok = df.rdd.map(s => {
    var arr = new Array[(String, String)](s.size)
    for (i <- 0 to s.size - 1) {
      arr(i) = (s.getString(i), s.schema.fieldNames(i))
    }
    arr
  }).map(s => {
    for (i <- s) yield ((i._2, i._1), 1)
  }).flatMap(s => s)
    .reduceByKey(_ + _)
    .map(s => (s._1._1, s._1._2 + "=" + s._2))
    .reduceByKey(_ +","+ _)

  ok.foreach(println(_))

 +----+----+----+
 |Col1|Col2|Col3|
 +----+----+----+
 |   a|   a|   a|
 |   a|   b|   c|
 |   b|   b|   c|
 +----+----+----+

 (Col1,a=2,b=1)
 (Col2,b=2,a=1)
 (Col3,a=1,c=2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...