【一】基于Faker创建hive数据的相关测试

一、Faker库的使用介绍

python中有个专门生成各种测试数据的库Faker,可以模拟生成各种字段的数据,并且支持多种语言中文,英文,日语,韩语等等。

安装方式:

pip3 install Faker

该库本身也支持命令行的方式使用,具体示例如下,可以使用"faker -h"查看相关说明文档。

[root@node-76 ~]# faker -r=5 -s=";" -l zh_CN name
王玉兰;
陈丹丹;
李俊;
赵建军;
刘玉;

为了更好的使用这个库,我自己也简单的编写了一个生成数据的python脚本faker_run.py,对Faker库实现的字段可以灵活配置,如果需要使用到有参方法可以自己定义字段进行扩展,并附有对应的参数说明:

# coding: utf-8
from faker import Faker
import sys
import os
import argparse
import json

class F:
        def __init__(self,fieldArg,filedTerminatedArg):
                self.currentNum=-1
                self.faker = Faker(locale='zh_CN')
                self.fieldArr=fieldArg.split(",")
                self.fieldTerminated = filedTerminatedArg
                self.fieldAttrArr = {}
                for field in self.fieldArr:
                        if field=="birthdate":
                                self.fieldAttrArr[field] = self.getBirthDate
                        elif field=="num":
                                self.fieldAttrArr[field] = self.getNum
                        else:
                                self.fieldAttrArr[field] = getattr(self.faker,field)
        def getBirthDate(self):
                return self.faker.date_time_between(start_date="-80y", end_date="now", tzinfo=None).strftime('%Y-%m-%d %H:%M:%S')
        def getNum(self):
                self.currentNum+=1
                return str(self.currentNum)
        def getJson(self):
                retDict={}
                for field in self.fieldArr:
                        retDict[field]=self.fieldAttrArr[field]()
                return json.dumps(retDict,ensure_ascii=False)
        def getTxt(self):
                retStr=""
                for field in self.fieldArr:
                        retStr+=self.fieldAttrArr[field]()+self.fieldTerminated
                return retStr[:-len(self.fieldTerminated)]
def run(args):
        if(args.file_name!=""):
                outFile=open(args.file_name,"w+",encoding="utf-8")
        f = F(args.f,args.ft)
        topN=5
        print("----输出前%d行样例数据---------------------------------------"%(topN))
        for i in range(args.n):
                if(args.t=='txt'):
                        data = f.getTxt()
                elif(args.t=='json'):
                        data = f.getJson()
                else:
                        print("无效的输出类型")
                        return
                if i<topN :
                        if args.file_name!="":
                                print(data)
                elif i%1000==0:
                        print("已保存%d行"%(i))
                        outFile.flush()
                if(args.file_name!=""):
                        outFile.write(data+args.lt)
                else:
                        print(data)

        print("====完成运行%d=================================================="%(i+1))
        if(args.file_name!=""):
                outFile.close()
def main(argv):
        parser = argparse.ArgumentParser(description='cat for excel.')
        parser.add_argument('file_name',type=str,nargs='?',help='out file name',default='')
        parser.add_argument('-t',type=str,help='data type [txt,json]',default='txt')
        parser.add_argument('-n',type=int,help='data num',default=10)
        parser.add_argument('-f',type=str,help='data field',default='num,name,birthdate,province,company,job,phone_number,ipv4,email')
        parser.add_argument('-ft',type=str,help='data field terminated',default=',')
        parser.add_argument('-lt',type=str,help='data line terminated',default='\n')
        args = parser.parse_args()
        print("===============================================================\n执行参数: -n:"+str(args.n)+"\t-type:"+args.t+"\t-f:"+args.f+"\t-ft:"+args.ft+"\tfilename:"+args.file_name)
        run(args)
if __name__ == '__main__':
        main(sys.argv)

,具体的使用方法如下:

[root@ubdi-hdp101 python]# python3 faker_run.py -h
usage: faker_run.py [-h] [-t T] [-n N] [-f F] [-ft FT] [-lt LT] file_name

cat for excel.

positional arguments:
  file_name   out file name

optional arguments:
  -h, --help  show this help message and exit
  -t T        data type [txt,json]
  -n N        data num
  -f F        data field
  -ft FT      data field terminated
  -lt LT      data line terminated
[root@ubdi-hdp101 python]#
[root@ubdi-hdp101 python]#
[root@ubdi-hdp101 python]# python3 faker_run.py -n 20 -t txt -f name,address,phone_number a.txt
===============================================================
执行参数: -n:20 -type:txt       -f:name,address,phone_number    -ft:,   filename:a.txt
----输出前5行样例数据---------------------------------------
张静,浙江省亮市南湖郑州路F座 778941,13389125782
萧刚,云南省超县南长阎路o座 656927,15295522263
刘建国,内蒙古自治区昆明县龙潭徐路O座 371290,18031166626
杨桂荣,江苏省佛山县合川贵阳街N座 504323,15657957560
靳博,广东省伟市静安高路i座 303910,13368251124
====完成运行20==================================================
[root@ubdi-hdp101 python]#
[root@ubdi-hdp101 python]#
[root@ubdi-hdp101 python]#
[root@ubdi-hdp101 python]#
[root@ubdi-hdp101 python]# python3 faker_run.py -n 30 -t json -f num,name,birthdate,company,job a.txt
===============================================================
执行参数: -n:30 -type:json      -f:num,name,birthdate,company,job       -ft:,   filename:a.txt
----输出前5行样例数据---------------------------------------
{"num": "0", "name": "胡欢", "birthdate": "2009-09-13 14:23:22", "company": "双敏电子网络有限公司", "job": "市政工程师"}
{"num": "1", "name": "刘想", "birthdate": "2013-10-12 15:26:23", "company": "南康科技有限公司", "job": "其他"}
{"num": "2", "name": "马婷婷", "birthdate": "2017-10-04 00:50:09", "company": "趋势传媒有限公司", "job": "其他"}
{"num": "3", "name": "王平", "birthdate": "1966-07-25 06:43:51", "company": "易动力传媒有限公司", "job": "纺织工"}
{"num": "4", "name": "董勇", "birthdate": "1952-01-01 02:50:33", "company": "菊风公司信息有限公司", "job": "监察人员"}
====完成运行30==================================================

二、hive数据相关测试

首先使用脚本生成500万的测试数据,后续基于此测试数据进行相关测试:

[root@ubdi-hdp101 python]# python3 faker_run.py -n 5000000 data.txt
===============================================================
执行参数: -n:5000000    -type:txt       -f:num,name,birthdate,province,company,job,phone_number,ipv4,ema                                           il      -ft:,   filename:data.txt
----输出前5行样例数据---------------------------------------
0,王金凤,1989-06-07 14:35:57,海南省,凌云科技有限公司,区域销售经理,15123183575,160.25.250.19,juanwen@exam                                           ple.net
1,丁荣,1967-12-06 02:41:04,天津市,海创科技有限公司,加油站工作员,13437906115,41.232.224.194,yongchen@exam                                           ple.net
2,毛利,1987-11-05 00:17:00,福建省,东方峻景传媒有限公司,咖啡师,15287050260,203.50.145.50,dingping@example                                           .net
3,张丽娟,2010-04-06 19:52:43,河北省,天益网络有限公司,物料经理,15344131631,67.129.243.24,minpeng@example.                                           org
4,周玉英,1976-04-29 04:15:37,福建省,南康信息有限公司,送餐员,13606031451,51.109.111.73,taogong@example.co                                           m
已保存1000行
已保存2000行
已保存3000行
已保存4000行
已保存5000行
已保存6000行
已保存7000行
省略多行。。。。。。。。。。。。。。
已保存4994000行
已保存4995000行
已保存4996000行
已保存4997000行
已保存4998000行
已保存4999000行
====完成运行5000000==================================================
[root@ubdi-hdp101 python]# ll -h
total 666M
-rw-r--r-- 1 root root 4.1K Oct 22 09:25 a.txt
-rw-r--r-- 1 root root 666M Oct 22 09:36 data.txt
-rw-r--r-- 1 root root 2.5K Oct 22 09:06 faker_run.py

待续。。。。。。。。。。。。。。。

借鉴文章:Python使用FaKer模拟数据!!!_追心-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值