2016-03-29 11 views
0

Ich versuche, ein Datum in einem Pig-Skript zu analysieren, und ich habe den folgenden Fehler "Hadoop gibt keine Fehlermeldung zurück".Datetime-Analyse in Apache Pig

Hier ist das Datumsformat Beispiel: 3/9/16 02.50

Und hier ist, wie ich es analysieren:

data = LOAD 'cleaned.txt' 
AS (Date, Block, Primary_Type, Description, Location_Description, Arrest, Domestic, District, Year); 

times = FOREACH data GENERATE ToDate(Date, 'M/d/yy h:mm a') As Time; 

Sie können here

die Datendatei sehen Hast du irgendeine Idee ? Dank


EDIT:

Es sieht wie der Fehler durch den STORE-Befehl auf "mal" verursacht wird.

Wenn ich ein DUMP tun dann bekam ich:

ERROR 1066: Unable to open iterator for alias times

Es geschieht nur, wenn ich die ToDate Funktion zu verwenden, ich andere Skripte, die perfekt funktionieren.

+0

können Sie angeben, wie Sie die Daten und vielleicht ein Datenschnipsel (2-3 Zeilen) laden? –

+0

Ich habe meinen Beitrag bearbeitet. –

+0

können Sie es als CSV veröffentlichen?Es ist unklar, wo Ihre Feldbegrenzer sind. Als ich versuchte, mit PigStorage mit '' als Trennzeichen zu laden, und versuchte, nur das Datum zu analysieren (ohne den Stundenanteil), funktionierte es OK. –

Antwort

2

Zunächst einmal müssen Sie den Loader in der LOAD-Anweisung angeben:

USING PigStorage('\t') 

ich davon aus, dass Sie mit der Tabulatortaste Separator verwenden. Wenn Sie kein Schema haben, geben Sie das Schema mit type an!

So you're load statement will be sg like this: 
data = LOAD 'SO/date2parse.txt' USING PigStorage('\t') AS (Date:chararray, Block:chararray, Primary_Type:chararray, Description:chararray, Location_Description:chararray, Arrest:chararray, Domestic:chararray, District:chararray, Year:chararray); 

Denn jetzt verwende ich nur chararray Typ für alles, aber Sie haben die Art zu bestimmen, was für Sie die richtige Darstellung ist.

Danach wird die Datumsumstellung funktioniert gut, wie Sie schrieb: (2016-03-09T23: 55: 00.000Z) (2016-03-09T23: 55: 00.000Z) (2016-03-09T23: 55: 00.000Z)

Mein Testskript:

data = LOAD 'SO/date2parse.txt' USING PigStorage('\t') AS (Date:chararray, Block:chararray, Primary_Type:chararray, Description:chararray, Location_Description:chararray, Arrest:chararray, Domestic:chararray, District:chararray, Year:chararray); 
times = FOREACH data GENERATE ToDate(Date, 'M/d/yy h:mm a') As Time; 
DUMP times; 

UPDATE: Einige Erklärung

Durch die Art und Weise der Standard-loader ist Schwein Speicher

PigStorage ist die Standardladefunktion für den LOAD-Operator.

aber es ist schöner zu spezifizieren. Das ursprüngliche Problem durch das Fehlen von Datentyp verursacht

Wenn Sie Typen zuordnen nicht, Felder Standard eingeben bytearray

so die ToDate vom Eingangstyp fehlgeschlagen.

+0

Vielen Dank für Ihre Hilfe! Wenn dieser Code jedoch für Sie funktioniert, liegt das Problem möglicherweise anderswo, denn wenn ich ihn ausführe (habe nur den Dateipfad geändert), habe ich folgende Fehlermeldung erhalten: FEHLER 1066: Iterator kann nicht für Alias ​​geöffnet werden. Und es sieht so aus, dass es nicht die ToDate-Funktion ist, die den Fehler verursacht, sondern der DUMP-Befehl, und für meinen Code war es der STORE-Befehl. Ich bin neu bei Pig, glaubst du, es kann ein Versions-Problem sein? Jedes Skript ohne ToDate funktioniert großartig für mich. –

+0

DUMP ist ein Basisbefehl sollte funktionieren. https://pig.apache.org/docs/r0.7.0/piglatin_ref1.html#Store+vs.+Dump – kecso

Verwandte Themen