Как сгруппировать значения строк в столбец на основе идентификатора? - PullRequest
0 голосов
/ 19 марта 2020

Пожалуйста, посмотрите этот пример; Я пытаюсь добиться этого с помощью spark sql / spark scala, но не нашел никакого прямого решения. Пожалуйста, дайте мне знать, если это невозможно с помощью Spark SQL / Spark Scala, в этом случае я могу написать программу java / python, записав файл из As-Is.

enter image description here

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Поскольку даются ответы в отличие от хорошего поиска в Google:

import org.apache.spark.sql.functions._
import spark.implicits._

val df = Seq(
   (1, "a"),
   (1, "c"),
   (2, "e")
   ).toDF("k", "v")

val df1 = df.groupBy("k").agg(collect_list("v"))
df1.show
0 голосов
/ 19 марта 2020
  1. GitHub: https://github.com/mvasyliv/LearningSpark/blob/master/src/main/scala/spark/GroupListValueToColumn.scala

  2. исходный код {package spark

import org. apache .spark. sql .SparkSession import org. apache .spark. sql .functions ._

объект GroupListValueToColumn extends App {

val spark = SparkSession.builder () .master ("local") .appName ("Mapper") .getOrCreate ()

case case Customer ( cust_id: Int, addresstype: String)

import spark.implicits ._

val source = Seq (Customer (300312008, "credit_card"), Customer (300312008, "to"), Customer (300312008, "от"), Клиент (300312009, "до"), Клиент (300312009, "от"), Клиент (300312010, "до"), Клиент (300312010, "credit_card"), Клиент (300312010, "от ")) .toDF ()

val res = source.groupBy (" cust_id "). agg (collect_list (" addresstype "))

res.show (false) // + - -------- + ------------------------- + // | cust_id | collect_list (адресный тип) | // + --------- + ------------------------- + // | 300312010 | [to, credit_card, from ] | // | 300312008 | [credit_card, to, from] | // | 300312009 | [to, from] | // + --------- + ------------------------- +

val res1 = source. groupBy ("cust_id"). agg (collect_set ("addresstype"))

res1.show (false)

// + --------- + --- --------------------- + // | cust_id | collect_set (адресный тип) | // + --------- + ------------------------ + // | 300312010 | [от, до, кредитная карта] | // | 300312008 | [от, до, кредитная карта] | // | 300312009 | [от, до] | // + --------- + ------------------------ +}

}

...