Como agrupar por elemento comum na matriz?

Arvind Kumar Anugula

Estou tentando encontrar a solução no spark para agrupar dados com um elemento comum em uma matriz.

 key                            value
[k1,k2]                         v1
[k2]                            v2
[k3,k2]                         v3
[k4]                            v4

Se algum elemento corresponder na chave, temos que atribuir o mesmo groupid a ele. (Elemento comum Groupby)

Resultado:

key                             value  GroupID
[k1,k2]                           v1    G1
[k2]                              v2    G1
[k3,k2]                           v3    G1 
[k4]                              v4    G2

Algumas sugestões já são dadas com Spark Graphx, mas neste momento a curva de aprendizado será mais para implementar isso para um único recurso.

Alper t. Turker

Incluir graphframes(a versão mais recente do Spark compatível é 2.1, mas também deve ser compatível com 2.2; se você usar a mais recente, terá que construir o seu próprio com patch 2.3) substituindo XXXpela versão Spark e YYYpela versão Scala:

spark.jars.packages  graphframes:graphframes:0.5.0-sparkXXX-s_YYY

Adicione chaves de explosão:

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

val df = Seq(
   (Seq("k1", "k2"), "v1"), (Seq("k2"), "v2"),
   (Seq("k3", "k2"), "v3"), (Seq("k4"), "v4")
).toDF("key", "value")

val edges = df.select(
  explode($"key") as "src", $"value" as "dst")

Converter para graphframe:

import org.graphframes._

val gf = GraphFrame.fromEdges(edges)

Defina o diretório do ponto de verificação (se não estiver definido):

import org.apache.spark.sql.SparkSession

val path: String = ???
val spark: SparkSession = ???
spark.sparkContext.setCheckpointDir(path)

Encontre componentes conectados:

val components = GraphFrame.fromEdges(edges).connectedComponents.setAlgorithm("graphx").run

Junte o resultado aos dados de entrada:

 val result = components.where($"id".startsWith("v")).toDF("value", "group").join(df, Seq("value"))

Resultado da verificação:

result.show

// +-----+------------+--------+
// |value|       group|     key|
// +-----+------------+--------+
// |   v3|489626271744|[k3, k2]|
// |   v2|489626271744|    [k2]|
// |   v4|532575944704|    [k4]|
// |   v1|489626271744|[k1, k2]|
// +-----+------------+--------+

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Como agrupar por elemento em objeto de matriz aninhada

Como agrupar itens na matriz por resumo de cada item

Agrupar por NÃO ter elemento em comum?

Como agrupar itens na matriz?

js - agrupar por matriz na matriz

Como obter elemento por chave na matriz JSON

Como agrupar matrizes na matriz pela chave do objeto do primeiro elemento

agrupar o objeto na matriz por nome

Como agrupar o mesmo item na matriz?

Como agrupar o mesmo tipo de valores em um comum e agrupar por aquele

Como agrupar os objetos na matriz por seus respectivos números de grupo

Como posso agrupar por valor distinto em uma matriz (valor, contagem) na clickhouse?

Como agrupar dados de matriz por data

No Pandas, quero agrupar por um elemento comum e obter uma lista dos elementos entre eles

Como usar 'agrupar por' na subconsulta?

Agrupar por objetos na matriz interna (agregação mongodb)

Como agrupar array de objetos por propriedade comum e colocar outras propriedades juntas

Como agrupar por um valor comum e dividir em colunas baseadas nele nos pandas?

Como agrupar por (chave múltipla) e soma de vários valores de propriedade na matriz javascript (NodeJs)

Como implementar "ordenar por" junto com "agrupar por" na consulta

como atribuir matriz a matriz por elemento sem levar elemento individual?

Como encontrar um elemento de valor específico na matriz por atributo específico?

como concatear cada elemento na matriz por outro valor de string único em swift

como posso inserir um elemento na matriz Numpy por índices de linha e coluna

como posso inserir um elemento na matriz Numpy por índices de linha e coluna

java 8 - como agrupar por cada elemento da lista

Como remover o elemento na matriz mongodb

Como acessar o elemento na matriz

Como duplicar um elemento especial na matriz

TOP lista

quentelabel

Arquivo