Hier j'ai touché Pig avec le titre Grammaire de base par Apache Pig (1), donc aujourd'hui est bien sûr la grammaire de base ( 2) Je me suis demandé si c'était le cas, mais cette zone du lien de référence de l'article d'avant-hier yutakikuchi / 20130107/1357514830) est tout ce que vous avez à faire, donc l'histoire de la grammaire est terminée en une seule fois. C'est le dernier épisode soudain.
Au lieu de cela, aujourd'hui, j'aimerais savoir à quel point la convivialité est différente lorsqu'il s'agit d'une certaine quantité de données énormes lors de l'utilisation des pandas, R et Pig que nous avons traités jusqu'à présent.
Considérez un fichier texte formé par un ensemble de lignes comme ceci: Les éléments clés sont la date, la clé primaire, le nom du magasin, l'horodatage, l'horodatage converti et la valeur numérique. Le délimiteur est un délimiteur de tabulation.
20140205 XXXXXXAABBCC Shop7 1391568621 2014-02-05 11:50:21 +0900 0
Cela représente environ 100 millions de lignes et l'ordinateur a des données avec une taille de données de 7,5 gigaoctets. Cette fois, trouvons la moyenne de ces données numériques. Découvrez lequel est le meilleur pour gérer cette tâche avec pandas, R et Pig.
Les performances de l'ordinateur utilisé pour la vérification sont Core i7 (Haswell) et une mémoire de 32 Go.
Python (pandas)
En Python, il existe une bibliothèque pour les opérations de trame de données appelée pandas. Il est préférable de l'utiliser sauf en cas de restrictions spéciales.
$ 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
Les caractéristiques des pandas sont les suivantes.
En d'autres termes, les pandas sont bons si l'ordinateur a suffisamment de performances pour stocker les données à exploiter en mémoire.
R
En parlant d'opérations sur les trames de données, c'est R.
df <- read.table("sample.txt", sep="\t")
colMeans(df[6])
#=> V6
# 305.448
Dans le cas de R, les données sont stockées dans la mémoire lors de la lecture de la table comme des pandas, mais lorsqu'il s'agit de plusieurs gigaoctets de données, les performances sont clairement plus lentes que celles des pandas.
De plus, colMeans () est utilisé pour calculer la moyenne, mais la vitesse d'exécution de la fonction statistique était également supérieure à celle des pandas.
Les caractéristiques de R sont résumées ci-dessous.
Pig
Enfin, Apache Pig. Cette fois, nous traiterons le fichier texte avec un seul ordinateur, nous utiliserons donc pig -x local.
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)
Dans le cas de Pig, la mémoire n'est pas allouée même si LOAD et les fonctions suivantes sont entrées. Le shell interactif répond également instantanément.
MapReduce est exécuté uniquement après le dernier vidage times_mean;.
Je pense qu'il est préférable d'utiliser des pandas si vous avez la possibilité de traiter des données avec un seul ordinateur, et Pig si les performances de l'ordinateur ne sont pas suffisantes pour vos données.
Recommended Posts