Je dispose d'un fichier source qui contient des mots et que vous voulez faire le nombre typique de mot, je me sers quelque chose qui se transforme en tableau et prend en mémoireEst-ce que les mots comptent en prenant les entrées du fichier ligne par ligne dans Scala?
def freqMap(lines: Iterator[String]): Map[String, Int] = {
val mappedWords: Array[(String, Int)] = lines.toArray.flatMap((l: String) => l.split(delimiter).map((word: String) => (word, 1)))
val frequencies = mappedWords.groupBy((e) => e._1).map { case (key, elements) => elements.reduce((x, y) => (y._1, x._2 + y._2)) }
frequencies
}
Mais je veux évaluer ligne par ligne et montrer la sortie comme chaque la ligne est traitée. Comment cela peut-il être fait paresseusement et sans mettre tout en mémoire
Pour un fichier volumineux, l'efficacité serait-elle compromise si je comprends bien que les résultats de la carte sont construits mot par mot? – jdk2588
Je ne suis pas certain de comprendre votre question. Le résultat 'Map' est construit mot à mot, mais comment peut-il être fait autrement? Même si vous deviez charger le fichier entier en mémoire (non recommandé pour un très gros fichier), diviser sur les espaces, puis 'groupBy (identité)', cela construit toujours le résultat un mot à la fois. Cela cache juste quelques détails. J'ai mentionné la procédure mot à mot pour marquer la distinction entre le traitement ligne par ligne dans lequel les résultats intermédiaires sont indiqués. Si quelque chose d'efficacité pourrait être améliorée car vous ne chargez pas tout en mémoire. – jwvh