使用argparse 函数在命令行定义读取文件位置及输出文件位置

目标,能在命令行设置读取文件的位置、写入文件的位置及文件名。
读取和写入的位置都在hdfs中,文件类型是parquet文件。

#-*- coding:utf-8 -*-
from pyspark.sql import SparkSession
import argparse
#建立集群连接
spark = SparkSession.builder.master("yarn-client").appName("yangyu").getOrCreate()

parser = argparse.ArgumentParser()
#增加读取位置参数
parser.add_argument("read_space", help="display a name of a table")
#写入位置参数
parser.add_argument("write_space", help="display a name of a space")
args = parser.parse_args()
#读取的位置
read_space = args.read_space
#写入的位置
write_space_name = args.write_space
#使用format函数调用参数,定义读取、写入位置
read_data_path = 'hdfs://bd01:8020/{}/part*.parquet'.format(read_space)
write_data_path = 'hdfs://bd01:8020/{}'.format(write_space_name)
#读取hdfs上parquet文件
df=spark.read.format('parquet').load(read_data_path)
#=========
中间可以写一些自定义的操作函数
#=========
#写入parquet文件在hdfs指定位置
df.repartition(1).write.mode('overwrite').parquet(write_data_path)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个使用 argparse 和 chardet 模块的 Python 程序,可以将指定编码格式的文件转存成 UTF-8 格式: ```python import argparse import chardet def convert_to_utf8(input_file, input_encoding=None): # 检测输入文件的编码格式 if input_encoding is None: with open(input_file, 'rb') as f: raw_data = f.read() input_encoding = chardet.detect(raw_data)['encoding'] # 读取输入文件并转换为 UTF-8 格式 with open(input_file, 'r', encoding=input_encoding) as f: data = f.read() output_file = input_file + '_utf8' with open(output_file, 'w', encoding='utf-8') as outfile: outfile.write(data) print('文件已成功转存为 UTF-8 格式,输出文件名为', output_file) if __name__ == '__main__': parser = argparse.ArgumentParser(description='将输入文件转存为 UTF-8 格式') parser.add_argument('input_file', help='输入文件名') parser.add_argument('-e', '--encoding', help='输入文件的编码格式') args = parser.parse_args() convert_to_utf8(args.input_file, args.encoding) ``` 首先,我们导入了 argparse 和 chardet 模块。其中 argparse 模块用于解析命令行参数,chardet 模块用于检测文件的编码格式。 然后,我们定义了一个 `convert_to_utf8` 函数,用于将指定编码格式的文件转存成 UTF-8 格式。该函数接受两个参数:输入文件名和输入文件的编码格式。如果用户没有指定输入文件的编码格式,则使用 chardet 模块“猜”出其编码格式,用于解码。 接着,我们使用 argparse 模块解析用户的命令行输入。其中,`parser.add_argument` 方法用于定义命令行参数,`parser.parse_args` 方法用于解析命令行参数并返回一个 Namespace 对象,其中包含了用户输入的参数和选项。 最后,我们调用 `convert_to_utf8` 函数,并传入用户输入的文件名和编码格式。如果用户没有指定编码格式,则 chardet 模块将检测文件的编码格式,并用于解码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值