Nur bestimmtes Feld in PIG laden?

8

Das ist meine Datei:

Col1, Col2, Col3, Col4, Col5

Ich brauche nur Col2 und Col3 .

Momentan mache ich das:

%Vor%

Gibt es eine Möglichkeit, nur Col2 und Col3 direkt zu laden, anstatt die gesamten input und dann generate erforderlichen Spalten zu laden?

    
ComputerFellow 31.12.2013, 14:49
quelle

1 Antwort

11

Ihre Methode, nur die Spalten zu bearbeiten, die Sie möchten, ist ein effektiver Weg, genau das zu tun, was Sie fragen. Denken Sie daran, dass alle Ihre Daten in HDFS gespeichert sind und Sie sie beim Starten des Skripts nicht vollständig in den Arbeitsspeicher laden. Sie müssen diese Bytes immer noch von der Festplatte lesen, auch wenn Sie sie nicht für die Verwendung in Ihrer Verarbeitung bereithalten, so dass es keinen Leistungsvorteil bietet, diese Daten niemals zu laden. Der Vorteil besteht darin, dass Sie es nie zu einem Reducer schicken müssen, den Sie mit Ihrer Methode erreicht haben.

In Fällen, in denen Pig sagen kann, dass eine Spalte nicht verwendet wird, wird sie sofort "abgeschnitten", was im Wesentlichen für Sie geschieht, was Sie mit Ihrer GENERATE getan haben. Dies ist jedoch nicht der Fall, wenn Sie eine UDF verwenden, die möglicherweise auf andere Felder zugreift, da Pig nicht in die UDF hineinschaut, um zu sehen, ob sie verwendet werden. Angenommen, b = foreach a generate Col2, Col3; ist ein Col3 . Wenn Sie

haben %Vor%

Dann wird Pig automatisch die 1. und 4. Spalte für Sie beschneiden, da es sehen kann, dass sie nie benutzt werden. Wenn Sie jedoch stattdessen

%Vor%

Dann kann Pig nicht beschneiden, da es nicht in der int UDF angezeigt wird und nicht weiß, dass die anderen Felder nicht verwendet werden. Wenn Sie sich nicht sicher sind, ob Pig dieses Beschneiden durchführt, können Sie die bereits vorhandene Methode COUNT / foreach verwenden. Und Pig sollte eine Diagnosemeldung drucken, wenn Sie Ihr Skript starten, das alle Spalten auflistet, die es löschen konnte.

Wenn Ihr Problem stattdessen darin besteht, dass Sie kein vollständiges Schema zur Verfügung stellen müssen, wenn Sie nur an ein paar Spalten interessiert sind, können Sie das Schema komplett überspringen und es in generate :

%Vor%     
reo katoa 31.12.2013, 15:10
quelle

Tags und Links