利用python将excel文件转成txt文件,再将txt文件上传hdfs,最后传入hive中

将excel文件转成txt文件,再将txt文件上传hdfs,最后传入hive中

注意的点

(1)先判断写入的txt文件是否存在,如果不存在就需要创建路径

(2)如果txt文件已经存在,那么先将对应的文件进行删除后再写入txt数据

(3)excel文件中有可能第一行是字段名,需要跳过

(版本1 :本地版本)

1.利用python将excel转成txt文件

bash 复制代码
from datetime import datetime, timedelta
import os
import pytz
import pandas as pd

def excel_to_txt(name, date):
    # Read Excel file into a DataFrame
    df = pd.read_excel(f'data/excel/{name}.xlsx', header=None, skiprows=1)

    # Define output directory and path
    output_directory = os.path.join('data', 'txt', date)
    os.makedirs(output_directory, exist_ok=True)  # Create directory if it doesn't exist
    output_path = os.path.join(output_directory, f'{name}.txt')

    # Check if the file already exists, if so, remove it
    if os.path.exists(output_path):
        os.remove(output_path)
        print(f'Existing file {output_path} removed.')

    # Write DataFrame to a new text file
    print('开始写入txt文件')
    df.to_csv(output_path, header=None, sep='\t', index=False)
    print('文件写入成功!')
    return output_path



if __name__ == '__main__':
    current_time = datetime.now(pytz.timezone('Asia/Shanghai'))
    one_day_ago = (current_time - timedelta(days=1)).strftime('%Y-%m-%d')
    local_file_path = excel_to_txt('IS_GS_Recruitment_Data_20231211', one_day_ago)
    print(local_file_path)

2.上传到hdfs

3.在hive中创建表

bash 复制代码
drop table if exists ticket.test_text;
create external table IF NOT EXISTS ticket.test_text
(
    name string,
    age int
) comment ''
      row format delimited fields terminated by '\t'
    lines terminated by '\n'
    NULL DEFINED AS ''
    stored as textfile
    LOCATION '/warehouse/ticket/ods/test_text';

4.将hdfs数据写入hive

bash 复制代码
load data inpath '/origin_data/test.txt' overwrite into table ticket.test_text;

(2)服务器版本

先把excel_to_txt脚本上传到服务器

excel_to_txt.py

bash 复制代码
from datetime import datetime, timedelta
import os
import pytz
import pandas as pd

def excel_to_txt(name, date):
    # Read Excel file into a DataFrame
    df = pd.read_excel(f'/opt/module/data/excel/{name}.xlsx', header=None,skiprows=1)
    # df = pd.read_excel(f'hdfs://mycluster:8020/origin_data/hr_cn/db/is_gs_recruitment_data_full/excel/{name}.xlsx', header=None,skiprows=1)
    # df = pd.read_excel(f'data/excel/{name}.xlsx', header=None,skiprows=1)

    # Define output directory and path
    output_directory = os.path.join('/opt/module/data', 'txt', date)
    os.makedirs(output_directory, exist_ok=True)  # Create directory if it doesn't exist
    output_path = os.path.join(output_directory, f'{name}.txt')

    # Check if the file already exists, if so, remove it
    if os.path.exists(output_path):
        os.remove(output_path)
        print(f'Existing file {output_path} removed.')

    # Write DataFrame to a new text file
    print('开始写入txt文件')
    df.to_csv(output_path, header=None, sep='\t', index=False)
    print('文件写入成功!')
    return output_path

if __name__ == '__main__':
    current_time = datetime.now(pytz.timezone('Asia/Shanghai'))
    one_day_ago = (current_time - timedelta(days=1)).strftime('%Y-%m-%d')
    local_file_path = excel_to_txt('IS_GS_Recruitment_Data_20231211', one_day_ago)
    print(local_file_path)

2.安装python3环境,安装链接:

https://editor.csdn.net/md/?articleId=129627849

3.执行python脚本

recruitment_excel_to_txt.sh

bash 复制代码
#!/bin/bash
/opt/module/miniconda3/bin/python  /opt/module/data/excel/excel_to_txt.py

4.上传到hdfs,并将数据导入hive

recruitment_hdfs_to_ods.sh

bash 复制代码
#!/bin/bash
DATAX_HOME=/opt/module/datax

# 如果传入日期则do_date等于传入的日期,否则等于前一天日期
if [ -n "$2" ] ;then
    datestr=$2
else
    datestr=$(date -d "-1 day" +%F)
fi

# 处理目标路径,检查目标路径是否存在且不为空,如果不为空,则清空目录内容
handle_target() {
  content_size=$(hadoop fs -count $1 | awk '{print $3}')
  if [[ $content_size -ne 0 ]]; then
    echo "路径$1不为空,正在清空......"
    hadoop fs -rm -r -f $1/*
  fi
}

# 整合处理目标路径和上传文件的逻辑
handle_target_and_put() {
  handle_target $2
  echo "上傳文件"
  hadoop fs -put $1 $2
}


function import_data(){
# $*: 获取所有参数,如果使用""包裹之后,$*当做整体
# $#: 获取参数个数
# $@: 获取所有参数,如果使用""包裹之后,把每个参数当做单独的个体
# $?: 获取上一个指令的结果
	tableNames=$*
	sql="use hr_cn;"
	#遍历所有表,拼接每个表的数据加载sql语句
	for table in $tableNames
	do
		sql="${sql}load data inpath '/origin_data/hr_cn/db/${table:4}/${datestr}/*' overwrite into table ${table} partition (dt='$datestr');"
	done
	#执行sql
	/opt/module/hive/bin/hive -e "$sql"
}

case $1 in
"all")
  handle_target_and_put /opt/module/data/txt/${datestr}/ /origin_data/hr_cn/db/recruitment_info_full/
  import_data "ods_recruitment_info_full"
  ;;
"recruitment_info")
  handle_target_and_put /opt/module/data/txt/${datestr}/ /origin_data/hr_cn/db/recruitment_info_full/
  import_data "ods_recruitment_info_full"
  ;;
esac
相关推荐
38242782723 分钟前
python:正则表达式
前端·python·正则表达式
锐学AI35 分钟前
从零开始学LangChain(二):LangChain的核心组件 - Agents
人工智能·python
风送雨43 分钟前
多模态RAG工程开发教程(上)
python·langchain
棒棒的皮皮1 小时前
【OpenCV】Python图像处理形态学之膨胀
图像处理·python·opencv·计算机视觉
小草cys1 小时前
HarmonyOS Next调用高德api获取实时天气,api接口
开发语言·python·arkts·鸿蒙·harmony os
爬山算法1 小时前
Netty(25)Netty的序列化和反序列化机制是什么?
开发语言·python
未知数Tel1 小时前
Dify离线安装插件
python·阿里云·pip·dify
龘龍龙1 小时前
Python基础学习(六)
开发语言·python·学习
热爱专研AI的学妹1 小时前
【搭建工作流教程】使用数眼智能 API 搭建 AI 智能体工作流教程(含可视化流程图)
大数据·数据库·人工智能·python·ai·语言模型·流程图
databook1 小时前
拒绝“凭感觉”:用回归分析看透数据背后的秘密
python·数据挖掘·数据分析