L'importation de fichier texte : Pas de Colonnes à analyser à partir d'un fichier
Je suis en train de prendre une entrée à partir de sys.stdin. C'est une carte réducteur de programme pour hadoop. Le fichier d'entrée est en txt forme. Aperçu de l'ensemble de données:
196 242 3 881250949
186 302 3 891717742
22 377 1 878887116
244 51 2 880606923
166 346 1 886397596
298 474 4 884182806
115 265 2 881171488
253 465 5 891628467
305 451 3 886324817
6 86 3 883603013
62 257 2 879372434
286 1014 5 879781125
200 222 5 876042340
210 40 3 891035994
224 29 3 888104457
303 785 3 879485318
122 387 5 879270459
194 274 2 879539794
291 1042 4 874834944
Code que j'ai essayé -
import sys
df = pd.read_csv(sys.stdin,error_bad_lines=False)
J'ai aussi essayé avec delimiter = \t, header=False,defining column name
Rien ne semble fonctionner, l'erreur que je reçois est cette erreur:
[root@sandbox lab]# cat /root/lab/u.data | python /root/lab/mid-1-mapper.py |python /root/lab/mid-1-reducer.py
Traceback (most recent call last):
File "/root/lab/mid-1-reducer.py", line 8, in <module>
df = pd.read_csv(sys.stdin,delimiter='\t')
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 645, in parser_f
return _read(filepath_or_buffer, kwds)
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 388, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 729, in __init__
self._make_engine(self.engine)
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 922, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)
File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 1389, in __init__
self._reader = _parser.TextReader(src, **kwds)
File "pandas/parser.pyx", line 538, in pandas.parser.TextReader.__cinit__ (pandas/parser.c:5896)
pandas.io.common.EmptyDataError: No columns to parse from file
Toutefois, si quand j'ai essayer directement en python(pas dans hadoop), il fonctionne très bien.
J'ai essayé de regardé dans stackoverflow postes, l'un des post a suggéré d'essayer et sauf. L'application qui me laisse avec un fichier vide.
Quelqu'un peut-il aider? Grâce
OriginalL'auteur mezz | 2016-10-22
Vous devez vous connecter pour publier un commentaire.
À l'aide de l'essayer et à l'exception seulement vous permet de continuer malgré les erreurs et de les gérer. Il ne sera pas comme par magie corriger vos erreurs.
read_csv
attendcsv
fichiers, votre entrée n'est évidemment pas. Un rapide coup d'oeil dans la documentation:Cela semble être le bon argument. Utilisation
À l'aide de
delimiter='\t'
convient également de travailler, à moins que les onglets sont développées (remplacés par des espaces). Comme nous ne peut pas vraiment dire,delim_whitespace
semble être la meilleure option.Si cela ne vous aide pas, il vous suffit d'imprimer votre
sys.stdin
pour vérifier si vous avez correctement passer le texte.Edit:
J'ai juste vu que vous utilisez
Est-ce destiné, de cette façon
mid-1-reducer.py
processus de la sortie demid-1-mapper.py
. Si vous voulez traiter le contenu du fichieru.data
pensez à lire le fichier et ne passys.stdin
.Toujours la même erreur.
Pouvez-vous imprimer votre
sys.stdin
à partir de vos scripts python (mid-1-reducer.py
est le seul qui compte)? Vous pouvez simplement utiliser lareadlines
fonction ou quelque chose de similaire. Donne-t-il la même sortie que de l'entrée que vous avez imprimée à votre question?J'ai changé le mappeur à cette importation pandas que le pd import sys df = pd.read_csv(sys.stdin,delim_whitespace=True) print df Et avec le même réducteur, il semble fonctionner maintenant.
Il était précédemment, il suffit d'imprimer stdline.
OriginalL'auteur DerWeh
Vous devez définir
delim_whitespace
à la vérité, à l'utilisation des espaces comme séparateur.OriginalL'auteur Grainier