Convertir le Tableau[(String,String)] type de RDD[(String,String)] type spark
Je suis nouvelle étincelle.
Voici mon code:
val Data = sc.parallelize(List(
("I", "India"),
("U", "USA"),
("W", "West")))
val DataArray = sc.broadcast(Data.collect)
val FinalData = DataArray.value
Ici FinalData
est de Array[(String, String)]
type.
Mais je veux données dans le formulaire de RDD[(String, String)]
type.
Puis-je convertir des FinalData
à RDD[(String, String)]
type.
Plus De Détail:
Je veux rejoindre les Deux RDD, de Sorte à optimiser la condition de jointure(Pour le point de vue des performances)
Je suis de radiodiffusion petit RDD à tous cluster de sorte que les données de brassage sera de moins en moins.(Et indirectement la performance aurez amélioré)
Donc, pour tout cela, j'ai écrit quelque chose comme ceci:
//Big Data
val FirstRDD = sc.parallelize(List(****Data of first table****))
//Small Data
val SecondRDD = sc.parallelize(List(****Data of Second table****))
Donc sans hésiter je vais diffuser Petit jeu de Données(moyens SecondRDD)
val DataArray = sc.broadcast(SecondRDD.collect)
val FinalData = DataArray.value
//Ici, il va donner d'erreur que
val Join = FirstRDD.leftOuterJoin(FinalData)
Trouvé Tableau requis RDD
C'est pourquoi je suis à la recherche pour le Tableau de RDD de conversion.
Vous devez vous connecter pour publier un commentaire.
Les émissions sont en effet très utile pour améliorer les performances d'une JOINTURE entre un grand RDD et une plus petite. Lorsque vous faites cela, la diffusion (avec
map
oumapPartitions
) remplace le rejoindre, il n'est pas utilisé dans une jointure, et, par conséquent, en aucun cas, vous aurez besoin de "transformer une diffusion dans un EDR".Voici à quoi il devrait ressembler:
Voir une solution similaire (à l'aide de
mapPartitions
), qui pourrait être plus efficace ici.Le réel problème, c'est que vous êtes la création d'un
Broadcast
variable, par la collecte de l'RDD
(notez que cette action convertit leRDD
dans unArray
). Donc, ce que je dis, c'est que vous avez déjà unRDD
, qui estData
, et cette variable a exactement les mêmes valeurs queFinalData
, mais dans la forme que vous voulezRDD[(String, String)]
.Vous pouvez vérifier cela dans la sortie suivante.
Bien, je ne comprends pas votre démarche, Vous avez juste besoin de paralléliser le
Broadcast
's valeur.MODIFIER
Après la lecture de votre question, je crois que le problème est presque la même. Vous essayez de
join
unRDD
avec unBroadcast
et ce n'est pas permis. Toutefois, si vous avez lu la documentation que vous pouvez remarquer qu'il est possible de rejoindre les deuxRDD
s (voir code ci-dessous).Data
a typeRDD[(String, String)]
- exactement ce que vous semblez être à la recherche de...Data
a typeRDD[(String, String)]
Data
et la RDD vous essayez de créer?DataArray.value
Et ce sera de retour en tant queArray
Mais je le veux enRDD
.Alors que l'avenir de l'opération, je peux effectuer surRDD
.