Créez votre propre Big Data en Python pour validation

Je voulais vérifier à portée de main à quel point le temps de traitement différerait entre Hadoop et RDB, j'ai donc créé mon propre Big Data en Python.

Structure de données

table La description
Gains 100,000,000 détails de vente.
Boutique 1,000,000 magasins.
zone 1,000 surfaces de magasin.
Produit 10,000,000 articles.
Classification 10,000 catégories de produits.

er.png

Génération de Big Data

$ cd ~
$ ls
generate_big_data.py
$ sudo apt install python3 -y
$ python3 generate_big_data.py
$ du -h ./*
184K    /home/vagrant/category.csv
8.0K    /home/vagrant/generate_big_data.py
122M    /home/vagrant/product.csv
3.8G    /home/vagrant/sales.csv
11M     /home/vagrant/shop.csv

programme

J'ai essayé de cracher dans un fichier chaque nombre fixe de cas afin qu'il ne devienne pas MOO.

import random
import datetime
import time

#Nombre de magasins: 1,000,000
SHOP_CNT = 1000000
#Nombre de zones: 1,000
AREA_CNT = 1000
#nombre d'objets: 10,000,000
PRODCUT_CNT = 10000000
#Catégories: 10,000
CATEGORY_CNT = 10000
#Nombre de ventes: 100,000,000
SALES_CNT = 100000000
#Prix maximum: 100,000
PRICE_MAX = 100000
#Nombre maximum d'achats: 100
COUNT_MAX = 100

SHOP_DST = 'shop.csv'
AREA_DST = 'area.txt'
PRODUCT_DST = 'product.csv'
CATEGORY_DST = 'category.csv'
SALES_DST = 'sales.csv'

# Table: shop
# Column: id,area_code
# id: 1 - 1,000,000
# area_code: 1 - 1,000

print('{} start: generate shop csv'.format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')))

start = time.time()

rows = []

# header
# rows.append('id,area_code\n')

for i in range(SHOP_CNT):
    shop_id = str(i + 1)
    area_code = str(random.randrange(1, AREA_CNT, 1))
    rows.append('{},{}\n'.format(shop_id, area_code))
    # 100,Sortie tous les 000
    if((i + 1) % 100000 == 0):
        cnt = i + 1
        print('shop rows: {}'.format(cnt))
        with open(SHOP_DST, 'a', encoding='utf-8') as f:
            f.writelines(rows)
        rows = []

elapsed_time = time.time() - start      

print('{} finish: generate shop csv({} sec)'.format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), elapsed_time))


# Table: area
# Column: area_code,area_name
# area_code: 1 - 1,000
# area_name: area_0 - area_1000

print('{} start: generate area csv'.format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')))

start = time.time()

rows = []

# header
# rows.append('area_code,area_name\n')

for i in range(AREA_CNT):
    area_code = str(i + 1)
    area_name = 'area_' + str(i + 1)
    rows.append('{},{}\n'.format(area_code, area_name))
    #Sortie toutes les 100 caisses
    if((i + 1) % 100 == 0):
        cnt = i + 1
        print('area rows: {}'.format(cnt))
        with open(AREA_DST, 'a', encoding='utf-8') as f:
            f.writelines(rows)
        rows = []

elapsed_time = time.time() - start      

print('{} finish: generate area csv({} sec)'.format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), elapsed_time))


# Table: product
# Column: id,category_code
# id: 1 - 10,000,000
# category_code: 1 - 10,000

print('{} start: generate product csv'.format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')))

start = time.time()

rows = []

# header
# rows.append('id,category_code\n')

for i in range(PRODCUT_CNT):
    product_id = str(i + 1)
    category_code = str(random.randrange(1, CATEGORY_CNT, 1))
    rows.append('{},{}\n'.format(product_id, category_code))
    # 1,000,Sortie tous les 000
    if((i + 1) % 1000000 == 0):
        cnt = i + 1
        print('product rows: {}'.format(cnt))
        with open(PRODUCT_DST, 'a', encoding='utf-8') as f:
            f.writelines(rows)
        rows = []

elapsed_time = time.time() - start      

print('{} finish: generate product csv({} sec)'.format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), elapsed_time))

# Table: category
# Column: category_code,name
# category_code: 1 - 10,000
# name: category_1 - category_10000

print('{} start: generate category csv'.format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')))

start = time.time()

rows = []

# header
# rows.append('id,name\n')

for i in range(CATEGORY_CNT):
    category_code = str(i + 1)
    category_name = 'category_' + str(i + 1)
    rows.append('{},{}\n'.format(category_code, category_name))
    # 1,Sortie tous les 000
    if((i + 1) % 1000 == 0):
        cnt = i + 1
        print('category rows: {}'.format(cnt))
        with open(CATEGORY_DST, 'a', encoding='utf-8') as f:
            f.writelines(rows)
        rows = []

elapsed_time = time.time() - start      

print('{} finish: generate category csv({} sec)'.format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), elapsed_time))


# Table: sales
# Column: id,shop_id,product_id,price,count,total_price
# id: 1 - 10,000,000

print('{} start: generate sales csv'.format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S')))

start = time.time()

rows = []

# header
# rows.append('id,shop_id,product_id,price,count,total_price\n')
cnt = 0

for i in range(SALES_CNT):
    sales_id = str(i + 1)
    shop_id = str(random.randrange(1, SHOP_CNT, 1))
    product_id = str(random.randrange(1, PRODCUT_CNT, 1))
    price = str(random.randrange(1, PRICE_MAX, 10))
    count = str(random.randrange(1, COUNT_MAX, 1))
    total_price = str(int(price) * int(count))
    rows.append('{},{},{},{},{},{}\n'.format(sales_id, shop_id, product_id, price, count, total_price))
    # 10,000,Sortie tous les 000
    if((i + 1) % 10000000 == 0):
        cnt = i + 1
        print('sales rows: {}'.format(cnt))
        with open(SALES_DST, 'a', encoding='utf-8') as f:
            f.writelines(rows)
        rows = []

elapsed_time = time.time() - start      

print('{} finish: generate sales csv({} sec)'.format(datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S'), elapsed_time))

Recommended Posts

Créez votre propre Big Data en Python pour validation
Créez vos propres commandes Linux en Python
[LLDB] Créez votre propre commande avec Python
Créez votre propre stéréogramme aléatoire (RDS) en Python.
[Python] journalisation dans votre propre module
Utilisez facilement vos propres fonctions en Python
Créez votre propre classe de structure graphique et son dessin avec python
Essayez docker: créez votre propre image de conteneur pour une application Web Python
Obtenez votre propre adresse IP en Python
Afficher la bougie de données FX (forex) en Python
N'utilisez pas readlines () dans votre instruction Python for!
Importez vos propres modules avec le développement Python de Grasshopper
python: utilisez votre propre classe pour numpy ndarray
Créez votre propre exception
Créer Spatia Lite en Python
[Pour l'enregistrement] Système d'image Keras Partie 1: Comment créer votre propre ensemble de données?
Créer un bot de collecte de données en Python à l'aide de Selenium
Mémo pour créer votre propre Box avec le Python de Pepper
Essayez d'améliorer votre propre quiz d'introduction avec Python
[Python] 2 Créez une carte risque-rendement pour votre portefeuille d'actifs
[Blender x Python] Créez votre propre fonction et résumé jusqu'à présent
Utilisez CASA Toolkit dans votre propre environnement Python
Liste du code Python utilisé dans l'analyse de Big Data
Créez votre premier fichier GDSII en Python en utilisant gdspy
[Road to Intermediate Python] Définissez dans votre propre classe
Gérer les données ambiantes en Python
Créer une fonction en Python
Créer un dictionnaire en Python
Python pour l'analyse des données Chapitre 4
Afficher les données UTM-30LX en Python
Techniques de tri en Python
Créez votre propre middleware Django
Python pour l'analyse des données Chapitre 2
À propos de "for _ in range ():" de python
Python pour l'analyse des données Chapitre 3
Essayez de trier vos propres objets avec des files d'attente prioritaires en Python
Créer un compte enfant de connect with Stripe en Python
[Comprendre au plus court] Principes de base de Python pour l'analyse des données
Obtenez des données LeapMotion en Python.
Concurrence avec VS Code Créez un environnement Python pour les professionnels sous Windows
Rechercher les fuites de mémoire dans Python
[Python] Créez votre propre bot LINE
Rechercher des commandes externes avec python
Lire les données des tampons de protocole avec Python3
Obtenir des données de Quandl en Python
Créer un conteneur DI avec Python
Gérez les données au format NetCDF avec Python
Cours Python pour la science des données - techniques utiles
Créer un fichier binaire en Python
Installer Networkx dans l'environnement Python 3.7 pour une utilisation dans les livres de science des données sur les logiciels malveillants
Créez Gmail en Python sans utiliser l'API
Hashing de données en R et Python
Créez votre propre service de résolution de noms
[Django] Créez votre propre page d'erreur 403, 404, 500
Créer une documentation de projet Python dans Sphinx
Modèle de prétraitement pour l'analyse des données (Python)
Formatage des données pour les graphiques Python / couleur