2017-08-04 1 views
1

Je suis en train de sauver le RDD avec charset ISO-8859-1 codé en utilisant saveAsNewAPIHadoopFile au seau AWS S3 Mais son changement de codage de caractères UTF-8 lors de son enregistrée au seau S3 .saveAsNewAPIHadoopFile changer le codage de caractères UTF-8

Extrait de code

val cell = “ MYCOST £25” //This is in UTF-8 character encoding . 
val charset: Charset = Charset.forName(“ISO-8859-1”)  
val cellData = cell.padTo(50, “ “).mkString 

val iso-data = new String(cellData.getBytes(charset), charset) // here it converts the string from UTF-8 to ISO-8859-1 

Mais lorsque j'enregistre le fichier en utilisant saveAsNewAPIHadoopFile il passe au format UTF-8. Je pense que saveAsNewAPIHadoopFile TextOutputFormat convertit automatiquement le codage de fichier en UTF-8. Est-il possible que je peux enregistrer le contenu au seau S3 avec le même encodage (ISO-8859-1)

ds.rdd.map { record => 
    val cellData = record.padTo(50, “ “).mkString 
    new String(cellData.getBytes(“ISO-8859-1”), “ISO-8859-1”) 
}.reduce { _ + _ } 
    }.mapPartitions { iter => 
     val text = new Text() 
     iter.map { item => 
     text.set(item) 
     (NullWritable.get(), text) 
     } 
    }.saveAsNewAPIHadoopFile(“”s3://mybucket/“, classOf[NullWritable], classOf[BytesWritable], classOf[TextOutputFormat[NullWritable, BytesWritable]]) 

apprécions votre aide

Répondre

0

Je n'ai toujours pas la bonne réponse, mais comme une solution de contournement , Je suis en train de copier le fichier sur HDFS et de convertir le fichier au format ISO en utilisant ICONV et en le sauvegardant dans le compartiment S3. Cela fait le travail pour moi, mais il nécessite deux étapes supplémentaires dans le cluster EMR. Je pensais que cela pourrait être utile à tous ceux qui rencontrent le même problème