Je suis toujours nouveau sur Spark/PySpark et j'ai la question suivante. Je suis une liste imbriquée avec ID's en elle:Spark/PySpark: Regrouper par n'importe quelle liste imbriquée
result = [[411, 44, 61], [42, 33], [1, 100], [44, 42]]
La chose je essaie de réaliser est que si un élément de sous-liste correspond à un élément dans un autre sous-liste tous les deux devraient être fusionnés. Le résultat devrait ressembler à ceci:
merged_result = [[411, 44, 61, 42, 33, 44, 42], [1,100]]
La première liste de "résultat" correspond à la quatrième liste. La quatrième liste correspond à la seconde, donc tous les 3 devraient être fusionnés en une seule liste. La troisième liste ne correspond à aucune autre liste, elle reste donc la même.
Je pourrais réaliser ceci en écrivant des boucles avec Python.
result_after_matching = []
for i in result:
new_list = i
for s in result:
if any(x in i for x in s):
new_list = new_list + s
result_after_matching.append(set(new_list))
#merged_result = [[411, 44, 61, 42], [42,33,44], [1, 100], [44,42,33,411,61]]
Comme ce n'est pas la sortie désirée je besoin de répéter la boucle et faire un autre ensemble() manifeste la « merged_result »)
set([[411,44,61,42,33], [42,33,44,411,61],[1,100], [44,42,33,411,61]])
-> [[411, 44, 61, 42, 33], [1,100]]
Comme la liste des listes, et les sous-listes obtient de plus en plus gros au fur et à mesure que de nouvelles données seront reçues, ce ne sera pas la fonction à utiliser.
Quelqu'un peut-il me dire s'il existe une fonction, dans Spark/Pyspark, pour faire correspondre/fusionner/grouper/réduire ces listes imbriquées beaucoup plus facilement et plus rapidement ?!
Merci beaucoup d'avance! MG
Votre solution fonctionne très vite! Même avec les listes 3k +. La seule chose qui ne fonctionnait pas sur le vrai exemple était cette liste de valeurs uniques (par exemple [57]) où ne figurait pas la sortie, avez-vous des explications ?! La valeur unique signifie que cet ID n'est dans aucune autre liste. Donc, je viens de diviser la liste en deux parties avant d'utiliser votre code et les fusionner à nouveau après. – mgruber
En outre, j'ai essayé d'utiliser GraphX mais comme vous l'avez dit ne fonctionnait pas en Python. D'une certaine manière, je ne peux utiliser que des scripts basés sur "Python" lors de notre distribution. Je vais parler à notre architecte de distribution. – mgruber