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?
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
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
:
Tags und Links hadoop mapreduce apache-pig