Gestern habe ich Pig mit dem Titel Grundlegende Grammatik von Apache Pig (1) berührt, daher ist heute natürlich die grundlegende Grammatik ( 2) Ich habe mich gefragt, ob es das ist, aber dieser Bereich des Referenzlinks von [dem Artikel vom vorgestern] [http://qiita.com/ynakayama/items/8f334b3314561c5d48af) yutakikuchi / 20130107/1357514830) ist alles, was Sie tun müssen, damit die Grammatikgeschichte auf einmal vorbei ist. Dies ist die plötzliche letzte Episode.
Stattdessen möchte ich heute herausfinden, wie unterschiedlich die Benutzerfreundlichkeit ist, wenn mit einer bestimmten Menge großer Datenmengen gearbeitet wird, wenn die Pandas, R und Pig verwendet werden, mit denen wir uns bisher befasst haben.
Stellen Sie sich eine Textdatei vor, die aus folgenden Zeilen besteht: Die Schlüsselelemente sind Datum, Primärschlüssel, Geschäftsname, Zeitstempel, konvertierter Zeitstempel und numerischer Wert. Das Trennzeichen ist ein Tabulatortrennzeichen.
20140205 XXXXXXAABBCC Shop7 1391568621 2014-02-05 11:50:21 +0900 0
Dies sind ungefähr 100 Millionen Zeilen, und der Computer verfügt über Daten mit einer Datengröße von 7,5 Gigabyte. Lassen Sie uns diesmal den Durchschnitt für diese numerischen Daten ermitteln. Finden Sie heraus, welches für Pandas, R und Pig am besten geeignet ist.
Die Leistung des zur Überprüfung verwendeten Computers beträgt Core i7 (Haswell) und 32 GB Arbeitsspeicher.
Python (pandas)
In Python gibt es eine Bibliothek für Datenrahmenoperationen namens Pandas. Es ist am besten, dies zu verwenden, es sei denn, es gibt besondere Einschränkungen.
$ pip install pandas
$ ipython
In [1]: import pandas as pd
In [2]: df = pd.read_table('sample.txt', header=None)
In [3]: df.ix[:,5].mean()
Out[3]: 305.4479883399822
Die Merkmale von Pandas sind wie folgt.
Mit anderen Worten, Pandas sind gut, wenn der Computer über genügend Leistung verfügt, um die zu betreibenden Daten im Speicher zu speichern.
R
Apropos Datenrahmenoperationen, es ist R.
df <- read.table("sample.txt", sep="\t")
colMeans(df[6])
#=> V6
# 305.448
Im Fall von R werden die Daten beim Lesen gespeichert, wie bei Pandas. Wenn es sich jedoch um mehrere Gigabyte Daten handelt, ist die Leistung deutlich langsamer als bei Pandas.
Außerdem wird colMeans () verwendet, um den Durchschnitt zu berechnen, aber die Ausführungsgeschwindigkeit der statistischen Funktion war der von Pandas überlegen.
Die Merkmale von R sind unten zusammengefasst.
Pig
Endlich Apache Pig. Dieses Mal werden wir die Textdatei mit einem einzigen Computer verarbeiten, also werden wir pig -x local verwenden.
df = LOAD 'sample.txt' USING PigStorage('\t') AS (date: chararray, key: chararray, shop: chararray, unixtime: int, humantime: chararray, times: int);
grouped = group df all;
times_mean = foreach grouped generate AVG(df.times);
dump times_mean;
#=> (305.4479883399822)
Im Fall von Pig wird kein Speicher zugewiesen, selbst wenn LOAD und nachfolgende Funktionen eingegeben werden. Die interaktive Shell reagiert ebenfalls sofort.
MapReduce wird erst nach dem letzten Dump ausgeführt times_mean;
Ich denke, es ist besser, Pandas zu verwenden, wenn Sie Daten mit einem einzigen Computer verarbeiten können, und Pig, wenn die Leistung des Computers für Ihre Daten nicht ausreicht.
Recommended Posts