2016-12-30 2 views
0

code d'Apache Spark GrpahX me donne des résultats:Comment faire pour convertir une collection d'un tableau de chaînes à cordes/Texte dans étincelle en utilisant scala

Array[(org.apache.spark.graphx.VertexId, Array[org.apache.spark.graphx.VertexId])] = Array((4,Array(17, 18, 20)), (16,Array(20)), (14,Array()), (6,Array(7)), (8,Array(9, 10)), (12,Array(1)), (20,Array(16, 19)), (18,Array()), (10,Array()), (2,Array(4, 15, 16)), (19,Array(4)), (13,Array()), (15,Array()), (11,Array(1)), (1,Array(5, 8)), (17,Array(4)), (3,Array(1, 8, 13, 14)), (7,Array(5)), (9,Array(5, 8)), (5,Array(1, 6, 7, 8))) 

Après saveAsTextFile:

(16,[[email protected]) 
(20,[[email protected]) 
(13,[[email protected]) 
(3,[[email protected]) 
(8,[[email protected]) 
(2,[[email protected]) 
(1,[[email protected]) 
(5,[[email protected]) 
(14,[[email protected]) 
(18,[[email protected]) 
(15,[[email protected]) 
(7,[[email protected]) 
(4,[[email protected]) 
(12,[[email protected]) 
(19,[[email protected]) 
(17,[[email protected]) 
(6,[[email protected]) 
(10,[[email protected]) 
(11,[[email protected]) 
(9,[[email protected]) 

Comment puis-je convertir ce tableau pour l'enregistrer de façon lisible comme:

(4: (17, 18, 20)) 

ou quelque chose comme ça

+0

avez-vous essayé la méthode 'Arrays.deepToString'? –

Répondre

0

Conversion d'une collection à une chaîne avec mkString() fonction:

scala> val records = Array((4,Array(17, 18, 20)), (16,Array(20)), (14,Array())) 
records: Array[(Int, Array[_ <: Int])] = Array((4,Array(17, 18, 20)), (16,Array(20)), (14,Array())) 

scala> val recordsRDD = sc.parallelize(records) 
recordsRDD: org.apache.spark.rdd.RDD[(Int, Array[_ <: Int])] = ParallelCollectionRDD[0] at parallelize at <console>:14 

scala> recordsRDD.map(rec => "(" + rec._1 + ": (" + rec._2.mkString(",") + "))").collect().foreach(println) 
(4: (17,18,20)) 
(16: (20)) 
(14:()) 

La méthode mkString est surchargée, vous pouvez également ajouter un préfixe et suffixe:

val a = Array("apple", "banana", "cherry") 
    a.mkString("[", ", ", "]") 
    res4: String = [apple, banana,cherry] 

scala> recordsRDD.map(rec => "(" + rec._1 + ": (" + rec._2.mkString(",") + "))").saveAsTextFile("/user/cloudera/col_toString1") 
scala> recordsRDD.map(rec => "(" + rec._1 + rec._2.mkString(": (", ", ", ")") + ")").saveAsTextFile("/user/cloudera/col_toString2") 
----- 
[[email protected] ~]$ hadoop fs -cat /user/cloudera/col_toString1/p* 
(4: (17,18,20)) 
(16: (20)) 
(14:()) 
[[email protected] ~]$ hadoop fs -cat /user/cloudera/col_toString2/p* 
(4: (17, 18, 20)) 
(16: (20)) 
(14:()) 
+0

Ça a l'air génial! Comment puis-je l'enregistrer sur le disque? – Marcin

+0

'recordsRDD.map (rec =>" ("+ rec._1 +": ("+ rec._2.mkString (", ") +"))). SavAsTextFile ("/ chemin/vers/cible") ' –

+0

si cela résout votre problème - s'il vous plaît envisager de marquer cette réponse comme réponse acceptée (faire le signe correct vert à côté des flèches haut/bas, également frapper la flèche vers le haut :) - vive! –