使用Python创建faker实例生成csv大数据测试文件并导入Hive数仓

文章目录

  • 一、Python生成数据
    • 1.1 代码说明
    • 1.2 代码参考
  • 二、数据迁移
    • 2.1 从本机上传至服务器
    • 2.2 检查源数据格式
    • 2.3 检查大小并上传至HDFS
  • 三、beeline建表
    • 3.1 创建测试表并导入测试数据
    • 3.2 建表显示内容
  • 四、csv文件首行列名的处理
    • 4.1 创建新的表
    • 4.2 将旧表过滤首行插入新表

一、Python生成数据

1.1 代码说明

这段Python代码用于生成模拟的个人信息数据,并将数据保存为CSV文件。

  1. 导入必要的模块:

    • csv:用于处理CSV文件的模块。
    • random:用于生成随机数。
    • faker:用于生成模拟数据的库。
  2. 定义生成数据所需的基本信息:

    • file_base_path:生成的CSV文件的基本路径。
    • rows_per_file:每个CSV文件中包含的行数。
    • num_rows:要生成的总行数。
    • fake:创建faker.Faker()实例,用于生成模拟数据。
  3. 定义模拟数据的字典:

    • nationalities:包含国籍编码和对应的国家。
    • regions:包含区域编码和对应的区域名称。
    • source_codes:包含一组源代码。
  4. 使用计数器 row_counter 来跟踪生成的行数。

  5. 使用循环生成多个CSV文件,每个文件包含 rows_per_file 行数据。

  6. 在每个文件中,生成随机的个人信息数据,并将其写入CSV文件。

  7. 数据生成的过程中,每10000行数据打印一次进度。

  8. 所有数据生成后,打印生成的总行数。

这段代码使用Faker库生成模拟的个人信息数据,每个CSV文件包含一定数量的行数据,数据字段包括 Rowkey, Name, Age, Email, Address, IDNumber, PhoneNumber, Nationality, Region, SourceCode

1.2 代码参考

import csv
import random
import faker# 文件基本路径
file_base_path = './output/personal_info_extended'
# 每个文件的行数
rows_per_file = 10000
# 总行数
num_rows = 10000000# 创建Faker实例
fake = faker.Faker()# 定义数据字典
nationalities = {1: 'US',2: 'CA',3: 'UK',4: 'AU',5: 'FR',6: 'DE',7: 'JP',
}regions = {1: 'North',2: 'South',3: 'East',4: 'West',5: 'Central',
}source_codes = ['A123', 'B456', 'C789', 'D101', 'E202']# 计数器用于跟踪生成的行数
row_counter = 0# 循环生成数据文件
for file_number in range(1, num_rows // rows_per_file + 1):file_path = f"{file_base_path}_{file_number}.csv"# 打开CSV文件以写入数据with open(file_path, 'w', newline='') as csvfile:csv_writer = csv.writer(csvfile)# 写入CSV文件的标题行if row_counter == 0:csv_writer.writerow(['Rowkey', 'Name', 'Age', 'Email', 'Address', 'IDNumber', 'PhoneNumber', 'Nationality', 'Region', 'SourceCode'])# 生成并写入指定行数的扩展的个人信息模拟数据for _ in range(rows_per_file):name = fake.name()age = random.randint(18, 99)email = fake.email()address = fake.address().replace('\n', ' ') // 替换掉地址中的换行,保持数据生成为一行id_number = fake.ssn()phone_number = fake.phone_number()nationality_code = random.randint(1, len(nationalities))nationality = nationalities[nationality_code]region_code = random.randint(1, len(regions))region = regions[region_code]source_code = random.choice(source_codes)data_row = [row_counter + 1, name, age, email, address, id_number, phone_number, nationality, region, source_code]csv_writer.writerow(data_row)row_counter += 1print(f'已生成 {row_counter} 行数据')print(f'{num_rows} 行扩展的个人信息模拟数据已生成')

在这里插入图片描述

二、数据迁移

2.1 从本机上传至服务器

[root@hadoop10 personInfo]# pwd
/opt/data/personInfo
[root@hadoop10 personInfo]# ls -l| wc -l
215
[root@hadoop10 personInfo]# wc -l *
...10000 personal_info_extended_98.csv10000 personal_info_extended_99.csv10000 personal_info_extended_9.csv2131609 总用量

通过命令显示我们使用了生成的215个csv文件,现在已经上传到了/opt/data/personInfo目录下。

2.2 检查源数据格式

[root@hadoop10 personInfo]# head personal_info_extended_1.csv
Rowkey,Name,Age,Email,Address,IDNumber,PhoneNumber,Nationality,Region,SourceCode
1,Hayley Jimenez,58,garrisonalicia@harris.com,"92845 Davis Circles Apt. 198 East Jerryshire, NV 35424",657-35-2900,(141)053-9917,DE,North,C789
2,Amy Johnson,23,samuelrivera@hall.com,"119 Manning Rapids Suite 557 New Randyburgh, MN 58113",477-76-9570,+1-250-531-6115,UK,North,D101
3,Sara Harper,31,gsandoval@hotmail.com,"98447 Robinson Dale Garzatown, ME 35917",254-77-4980,7958192189,AU,East,A123
4,Alicia Wang,53,kellyreed@evans.com,"531 Lucas Vista New Laura, MO 62148",606-19-1971,001-295-093-9174x819,DE,West,C789
5,Lauren Rodriguez,71,rebeccasaunders@yahoo.com,"060 Gomez Ports Suite 355 Lake Aarontown, CO 38284",186-61-7463,8458236624,DE,East,E202
6,Juan Harris,98,davidsonjohn@hines.com,"50325 Alvarez Forge Apt. 800 New Ericchester, AL 16131",529-53-1492,+1-302-675-5810,CA,East,B456
7,Stephanie Price,90,sroberts@becker.com,"9668 Erik Inlet Port Joshua, MO 62524",303-11-9577,628.011.4670,UK,East,C789
8,Nicole Parker,61,tmcneil@rose-rodriguez.com,"485 Elliott Branch Scottshire, NJ 03885",473-55-5636,001-625-925-3712x952,FR,West,A123
9,Joel Young,54,john03@hotmail.com,"9413 Houston Flats Apt. 095 West Peggy, MD 56240",547-31-2815,920.606.0727x27740,JP,Central,E202

使用head命令查看文件的头,发现了首行字段,我们可以通过首行字段编写建表语句。

2.3 检查大小并上传至HDFS

[root@hadoop10 data]# du -h
282M    ./personInfo
282M    .
[root@hadoop10 data]# hdfs dfs -put /opt/data/personInfo /testdir/[root@hadoop10 data]# hdfs dfs -du -h /testdir/
281.4 M  281.4 M  /testdir/personInfo

linux本地文件占用282M,上传至HDFS集群/testdir/目录后占用281.4M.

三、beeline建表

3.1 创建测试表并导入测试数据

CREATE TABLE personal_info (Rowkey STRING,Name STRING,Age STRING,Email STRING,Address STRING,IDNumber STRING,PhoneNumber STRING,Nationality STRING,Region STRING,SourceCode STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;LOAD DATA INPATH '/testdir/personInfo/*.csv' INTO TABLE personal_info;

如果csv文件的每一行都有同样的列名,需要在建表语句最后添加以下代码:TBLPROPERTIES ("skip.header.line.count"="1"),将首行跳过。

本案例由于使用python生成文件,只有第一个csv文件有列名,其余csv没有列名,我们稍后单独处理这一个首行。

3.2 建表显示内容

0: jdbc:hive2://hadoop10:10000> CREATE TABLE personal_info (
. . . . . . . . . . . . . . . >     Rowkey STRING,
. . . . . . . . . . . . . . . >     Name STRING,
. . . . . . . . . . . . . . . >     Age STRING,
. . . . . . . . . . . . . . . >     Email STRING,
. . . . . . . . . . . . . . . >     Address STRING,
. . . . . . . . . . . . . . . >     IDNumber STRING,
. . . . . . . . . . . . . . . >     PhoneNumber STRING,
. . . . . . . . . . . . . . . >     Nationality STRING,
. . . . . . . . . . . . . . . >     Region STRING,
. . . . . . . . . . . . . . . >     SourceCode STRING
. . . . . . . . . . . . . . . > )
. . . . . . . . . . . . . . . > ROW FORMAT DELIMITED
. . . . . . . . . . . . . . . > FIELDS TERMINATED BY ','
. . . . . . . . . . . . . . . > STORED AS TEXTFILE;
No rows affected (0.147 seconds)
0: jdbc:hive2://hadoop10:10000> LOAD DATA INPATH '/testdir/personInfo/*.csv' INTO TABLE personal_info;
No rows affected (2.053 seconds)
0: jdbc:hive2://hadoop10:10000> select * from personal_info limit 5;
+-----------------------+---------------------+--------------------+----------------------------+------------------------------------------------+-------------------------+----------------------------+----------------------------+-----------------------+---------------------------+
| personal_info.rowkey  | personal_info.name  | personal_info.age  |    personal_info.email     |             personal_info.address              | personal_info.idnumber  | personal_info.phonenumber  | personal_info.nationality  | personal_info.region  | personal_info.sourcecode  |
+-----------------------+---------------------+--------------------+----------------------------+------------------------------------------------+-------------------------+----------------------------+----------------------------+-----------------------+---------------------------+
| Rowkey                | Name                | Age                | Email                      | Address                                        | IDNumber                | PhoneNumber                | Nationality                | Region                | SourceCode                |
| 1                     | Hayley Jimenez      | 58                 | garrisonalicia@harris.com  | "92845 Davis Circles Apt. 198 East Jerryshire  |  NV 35424"              | 657-35-2900                | (141)053-9917              | DE                    | North                     |
| 2                     | Amy Johnson         | 23                 | samuelrivera@hall.com      | "119 Manning Rapids Suite 557 New Randyburgh   |  MN 58113"              | 477-76-9570                | +1-250-531-6115            | UK                    | North                     |
| 3                     | Sara Harper         | 31                 | gsandoval@hotmail.com      | "98447 Robinson Dale Garzatown                 |  ME 35917"              | 254-77-4980                | 7958192189                 | AU                    | East                      |
| 4                     | Alicia Wang         | 53                 | kellyreed@evans.com        | "531 Lucas Vista New Laura                     |  MO 62148"              | 606-19-1971                | 001-295-093-9174x819       | DE                    | West                      |
+-----------------------+---------------------+--------------------+----------------------------+------------------------------------------------+-------------------------+----------------------------+----------------------------+-----------------------+---------------------------+
5 rows selected (0.52 seconds)

四、csv文件首行列名的处理

4.1 创建新的表

解决思路是通过将整表的数据查询出,插入到另一个新表中,而后删除旧的表,该方法如果在生产环境中使用应考虑机器性能和存储情况。

CREATE TABLE pinfo (Rowkey STRING,Name STRING,Age STRING,Email STRING,Address STRING,IDNumber STRING,PhoneNumber STRING,Nationality STRING,Region STRING,SourceCode STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;

查询旧表中的行数。

0: jdbc:hive2://hadoop10:10000> select count(*) from personal_info;
+----------+
|   _c0    |
+----------+
| 2131609  |
+----------+
1 row selected (45.762 seconds)

4.2 将旧表过滤首行插入新表

INSERT OVERWRITE TABLE pinfo
SELECTt.Rowkey,t.Name,t.Age,t.Email,t.Address,t.IDNumber,t.PhoneNumber,t.Nationality,t.Region,t.SourceCode
FROM (SELECTRowkey,Name,Age,Email,Address,IDNumber,PhoneNumber,Nationality,Region,SourceCodeFROM personal_info
) t
WHERE t.Name != 'Name';

0: jdbc:hive2://hadoop10:10000> select * from pinfo limit 5;
+---------------+-------------------+------------+----------------------------+------------------------------------------------+-----------------+--------------------+-----------------------+---------------+-------------------+
| pinfo.rowkey  |    pinfo.name     | pinfo.age  |        pinfo.email         |                 pinfo.address                  | pinfo.idnumber  | pinfo.phonenumber  |   pinfo.nationality   | pinfo.region  | pinfo.sourcecode  |
+---------------+-------------------+------------+----------------------------+------------------------------------------------+-----------------+--------------------+-----------------------+---------------+-------------------+
| 1             | Hayley Jimenez    | 58         | garrisonalicia@harris.com  | "92845 Davis Circles Apt. 198 East Jerryshire  |  NV 35424"      | 657-35-2900        | (141)053-9917         | DE            | North             |
| 2             | Amy Johnson       | 23         | samuelrivera@hall.com      | "119 Manning Rapids Suite 557 New Randyburgh   |  MN 58113"      | 477-76-9570        | +1-250-531-6115       | UK            | North             |
| 3             | Sara Harper       | 31         | gsandoval@hotmail.com      | "98447 Robinson Dale Garzatown                 |  ME 35917"      | 254-77-4980        | 7958192189            | AU            | East              |
| 4             | Alicia Wang       | 53         | kellyreed@evans.com        | "531 Lucas Vista New Laura                     |  MO 62148"      | 606-19-1971        | 001-295-093-9174x819  | DE            | West              |
| 5             | Lauren Rodriguez  | 71         | rebeccasaunders@yahoo.com  | "060 Gomez Ports Suite 355 Lake Aarontown      |  CO 38284"      | 186-61-7463        | 8458236624            | DE            | East              |
+---------------+-------------------+------------+----------------------------+------------------------------------------------+-----------------+--------------------+-----------------------+---------------+-------------------+
5 rows selected (0.365 seconds)
0: jdbc:hive2://hadoop10:10000>

在这里插入图片描述
在yarn中查看新表插入的进度。

最后新表的查询结果显示比旧表少1行即为插入处理完成。

0: jdbc:hive2://hadoop10:10000> select count(*) from pinfo;
+----------+
|   _c0    |
+----------+
| 2131608  |
+----------+
1 row selected (0.291 seconds)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/106959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker部署的jenkins配置(接口自动化)

目录 一、jenkins汉化1.点击Manage Jenkins(系统管理),点击Plugins(插件)2.安装Locale插件 二、jenkins配置allure报告1.安装allure插件2.配置 三、配置jenkins项目1.新建任务2.创建项目3.源码管理4.构建触发器5.增加构…

12个VIM编辑器的高级玩法

vim 是一个很好用的编辑器,应用十分广泛。但关于 vim,总有一些你不知道的事情,我们需要持续不断的学习。 我经常使用 vim,也经常在各大社区、论坛看到 vim 专家用户分享经验,今天我们就总结其中常用的一部分&#xff…

【问题解决】Ubuntu 安装 SeisSol 依赖 easi 报错解决: undefined reference to `H5free_memory‘

兼职帮客户安装 SeisSol 时问题解决,安装 easi 这个报错卡了很久(搞了一天),记录下,以备后用~ # 编译器问题 rootubuntu:/opt/easi# make -j install [ 4%] Building CXX object CMakeFiles/easi.dir/src/component/…

科普向丨语音芯片烧录工艺的要求

语音芯片烧录工艺要求烧录精度、速度、内存容量、电源稳定性、兼容性和数据安全性。这些要素需优化和控制以保证生产高效、稳定、安全并烧录出高质量的语音芯片。不同厂家生产的语音芯片在烧录工艺上存在差异,需相应设计和研发以实现兼容。 一、烧录精度 语音芯片烧…

小程序页面路由传参的方法?

小程序页面路由传参的方法有三种&#xff1a; 1.URL参数传递&#xff1a;通过在页面跳转的URL中携带参数实现传参。可以使用wx.navigateTo或wx.redirectTo等跳转方法&#xff0c;并在URL中添加参数。 示例&#xff1a; // PageA.wxml <button bindtap"navigateToPage…

hive排序

目录 order by (全局排序asc ,desc) sort by(reduce 内排序) Distribute by(分区排序) Cluster By&#xff08;当 distribute by 和 sorts by 字段相同时 &#xff0c;可以使用 &#xff09; order by (全局排序asc ,desc) INSERT OVERWRITE LOCAL DIRECTORY /home/test2 …

城市综合管廊运维的系统集成方案

摘 要&#xff1a;从网络拓扑结构、开放式实时以太网协议、控制层系统配置方面介绍了综合管廊的系统网络架构设计&#xff0c;分析了无线网络特性&#xff0c;阐述了基于HTML5架构所能实现的功能的初步构想&#xff0c;以便于综合管廊运维人员巡检&#xff0c;确保管廊本体安全…

2023年(2024届)双非保研历程(中南、东南、浙大、信工所、国防科大、北邮)

个人情况 学校层次&#xff1a;双非 专业&#xff1a;信息安全&#xff08;投的基本都是网安&#xff09; 排名&#xff1a;2/66 英语&#xff1a;六级565&#xff0c;四级560 竞赛&#xff1a;大英赛国三、美赛H、蓝桥杯省一、数竞省一、词达人省一、数模国赛省三。 论文&…

第二证券:国际油价大幅上涨 后市恐难持续走高

上个买卖周&#xff0c;受巴以冲突影响&#xff0c;原油商场成为各方关注的焦点。到上星期五收盘&#xff0c;布伦特原油周内涨幅达7%以上&#xff0c;为本年2月以来最大周涨幅&#xff0c;WTI原油周内累计上涨近6%。业内人士认为&#xff0c;其时地缘要素是导致油价出现异动的…

excel映射xml方法

excel映射xml方法 创建xml模板 新建一个文本文件&#xff0c;编写模板并命名为xxx.xml <?xml version"1.0" encoding"UTF-8"?> <root><item ID""><surname></surname><man></man><woman>&…

语音识别whisper的介绍、安装、错误记录

介绍 Whisper是OpenAI于2022年9月份开源的通用的语音识别模型。它是在各种音频的大型数据集上训练的模型&#xff0c;也是一个可以执行多语言语音识别、语音翻译和语言识别的多任务模型。 论文链接&#xff1a;https://arxiv.org/abs/2212.04356 github链接&#xff1a;https:…

关于京东API数据接口业务的详细介绍

参数说明 通用参数说明 url说明 https://…….cn/平台/API类型/ 平台&#xff1a;淘宝&#xff0c;京东等&#xff0c; API类型:[item_search,item_get,item_search_shop等]version:API版本key:调用key,测试key:test_api_keysecret:调用secret,测试secret:(不用填写)cache:[ye…

小程序+阿里Oss上传临时文件

以 Taro 框架为例&#xff08;微信小程序可以直接将 Taro 替换为 wx&#xff09;。 首先获取图片 Taro.chooseImage({count: 1,sizeType: [original, compressed],success: (result) > {// 上传图片文件的具体代码useTaroUploadFile(result.tempFilePaths[0]).then(res>…

2023年中国城市矿产行业产值及发展趋势分析[图]

城市矿产是指工业化和城镇化过程中产生和蕴藏于废旧机电设备、电线电缆、通讯工具、汽车、家电、电子产品、金属和塑料包装物以及废料中&#xff0c;可循环利用的钢铁、有色金属、贵金属、塑料、橡胶等资源。 开展“城市矿产”示范基地建设是缓解资源瓶颈约束&#xff0c;减轻环…

vue项目中引入地图的详细教程

第一步&#xff1a;在项目中安装地图插件 npm i amap/amap-jsapi-loader --save 第二步&#xff1a;创建一个容器 添加id属性 &#xff08;因为地图必须使用id 不能使用class&#xff09; <div id"maps"></div> 第三步&#xff1a;给这个容器设置宽…

JUC并发编程——集合类不安全及Callable(基于狂神说的学习笔记)

集合类不安全 List不安全 package unsafe;import PC.A;import java.util.*; import java.util.concurrent.CopyOnWriteArrayList;// ArrayList线程不安全&#xff0c;在多线程下使用ArrayList会报错&#xff1a; // java.util.ConcurrentModificationException 并发修改异常 …

CSS餐厅练习链接及答案

目录 链接&#xff1a; level 1 level 2 level 3 level 4 level 5 level 6 level 7 level 8 level 9 level 10 level 11 level 12 level 13 level 14 level 15 level 16 level 17 level 18 level 19 level 20 level 21 level 22 level 23 level 24 le…

第二证券:券商etf的买卖规则?

在当时迅速发展的证券商场中&#xff0c;ETF已经成为出资者的首选。ETF&#xff08;Exchange Traded Fund&#xff09;是一种证券东西&#xff0c;它被规划成类似于股票的生意办法。即出资者可以在证券生意所上以股票办法进行购买和出售。详细到券商ETF的生意规矩&#xff0c;咱…

【数据结构】双链表的相关操作(声明结构体成员、初始化、判空、增、删、查)

双链表 双链表的特点声明双链表的结构体成员双链表的初始化带头结点的双链表初始化不带头结点的双链表初始化调用双链表的初始化 双链表的判空带头结点的双链表判空不带头结点的双链表判空 双链表的插入&#xff08;按值插入&#xff09;头插法建立双链表带头结点的头插法每次调…

机器视觉在自动驾驶汽车中的应用与挑战

机器视觉在自动驾驶汽车中扮演着至关重要的角色&#xff0c;它使车辆能够感知和理解周围环境&#xff0c;以便自主驾驶。以下是机器视觉在自动驾驶汽车中的应用以及相关挑战&#xff1a; 应用&#xff1a; 障碍物检测与避让&#xff1a; 机器视觉系统可以检测和识别路上的障碍…