Ich habe versucht, eine Textdatei mit Python zu verarbeiten. Meine Textdatei ist in der Muttersprache von Vietnamesen, die UTF-8 verwenden. Nachdem ich die Map-Funktion verwendet habe, scheint die Ausgabe nicht mehr zu formatieren. Ich habe den Code getrennt und Schritt für Schritt ausgegeben. Ich stelle fest, dass die Codierung nach dem Kartenwort falsch ist: (Wort, 1). Um genauer zu sein, bis zu output7.txt, der Text war: Đức đã Nga GUCSpark Python Kartenfunktion: Fehler beim Verschlüsseln von utf-8
jedoch am Ausgang 8 die Codierung falsch gelaufen ist:
(u '\ u0110 \ u1ee9c', 1) (u '\ u0111 \ XE3', 1) (u'ng \ XE3' , 1) (u'g \ u1ee5c‘, 1)
es soll sein (Đức, 1) (đã, 1) (ngã, 1) (gục, 1)
Ich habe versucht, diesen Fehler für 5 Stunden zu beheben, aber nichts wirklich Nützliches gefunden. Kann mir jemand sagen, warum die Map-Funktion alles zerstört hat, während die ähnliche FlatMap-Funktion gut funktioniert?
Vielen Dank. Unten ist mein Quellcode.
> #!/usr/bin/python
# -*- coding: utf8 -*-
from pyspark import SparkContext, SparkConf
import os, sys
import codecs
conf =SparkConf().setAppName("wordcount").setMaster("local")
sc = SparkContext(conf=conf)
reload(sys)
sys.setdefaultencoding('utf-8')
text_file = sc.textFile("outputtest/*",use_unicode=False)
dict_file = sc.textFile("keyword");
text_file.saveAsTextFile("Output6.txt")
counts = text_file.flatMap(lambda line: line.split(" "))
counts.saveAsTextFile("Output7.txt")
counts = counts.map(lambda word: (word.decode("utf-8"), 1))
counts.saveAsTextFile("Output8.txt")
counts= counts.reduceByKey(lambda a, b: a + b)
dicts = dict_file.flatMap(lambda line: line.split(", ")) \
.map(lambda word: (word.replace("'","").replace(" ","_")))
keyword = dicts.join(counts);
counts.saveAsTextFile("Output9.txt")
Dank für die explaination, aber ich fand es ein bisschen schwer zu verstehen, wie ich für Python-API in Spark-Suche habe ich nicht gesehen Formatmethode. Könntest du das ausarbeiten? Vielen Dank – TheCyberliem
'Format' ist eine Standard-Python-String-Methode: https://docs.python.org/2/library/stdtypes.html#str.format – zero323
Ich habe den Code hinzugefügt und es funktioniert, ich versuche immer noch Versteh was das war. Danke vielmals. – TheCyberliem