栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

第一次实习中学习到的(python,数据处理,Spark,Hadoop,Linux,time related

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第一次实习中学习到的(python,数据处理,Spark,Hadoop,Linux,time related

实习学习到的:

2021.7.13 - 9.18 so hard.

一、python库相关 1. 正则表达式

正则表达式匹配中文

wget 获取网页地址数据

python中wget方式下载使用
在使用download将源数据的文件下载到当前的文件夹中,需要判断当前文件夹中是否存在这个文件

if os.path.exists(your_target_file_path):
	os.remove(your_target_file_path)
	print('your local file is removed')
2. os 系统文件操作

python os._exit() 和 sys.exit()
在自动化程序中,利用一个status变量存储执行当前程序的执行情况,出错为False, 正常输出为True

# 这个your_script 写的很复杂,具体就是执行一个程序加的一些“包装”, 类似与装饰器,
# 对于一个函数,你还是正常传参,但是在执行代码过程中,会有日志,会对程序的执行结果返回状态的true, false
status = your_script(job,...)
if status:
	sys.exit(0) # 无错误
else:
	sys.exit(1) # 有错误

输出当前文件夹下,某个文件的名字:

CUR_DIR = os.path.dirname(os.path.realpath(__file__))
# os.path.realpath(__file__): 当前脚本文件的绝对路径,是../yourscript.py
# os.path.dirname:某个文件夹下的文件名,即,最后一个/ 之前的路径
# 当这个文件夹是一个空文件夹时,返回的是空

分解:、
参考:
python3中 os.path.realpath(file) 的使用
os.path.dirname用法

3. sys 系统输出

Python中sys.stdout.flush() 的作用
Python -u 和 sys.stdout.flush()
简言之,意思时让python输出台及时将我的输出打印出来,给我们看见。
从评论区来看,在windows的python查看没有多大区别,但是当你的程序运行在Linux平台上时就会不一样。(实习是在Linux上执行的)

def time_print(msg):
	stime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
	print("{} {}".format(stime, msg))
	sys.stdout.flush()

输出时间

[Python中 sys.argv的用法简明解释
简言之,使用sys.argv得到的是一个列表,第0个元素是当前文件,剩下后面的元素是你在命令行执行当前.py文件传入的参数
用途:解析在命令行执行该文件传入的参数。
注:类似有一个库 argparse有一个方法ArgumentParser可以专门用来解析解析命令行执行当前函数的参数,只是在解析参数之前需要你给出一个关键字,比如说有我见到的解析时间参数-d, 可以在传入参数时,就将时间参数解析我们需要的格式。

4. pandas处理表格相关

关于这个任务,我自己都不想说是多么的无趣和枯燥,填表?四个表?十几列?每个数都要从1000转变成1,000的格式,还好,我们的好朋友pandas一直都在,那么我们开始吧。

  • 向数据中添加新的行
df.append(series_line, ignore_index=True) # 就酱
  • 重新排列df的列的顺序
    这里用到的是在输出为csv文件时,排列列的顺序
df.columns
# ['a', 'b', 'c']
# 想变成['c', 'b', 'a']
df.to_csv(your_path, index=False, columns=['c', 'b', 'a'])

参考:记一次pandas对输出列的顺序重排

pandas 对某一列指定小数位数保留

如何对Pandas Dataframe中的每个元素或者说每个数应用一个函数-applymap()函数的使用

Pandas教程 | 超好用的Groupby用法详解

4. 杂

Python init.py 文件使用
简言之,有了这个文件,就可以将这个文件夹下的.py文件作为包,导入到另外一个文件中去。

关于python:如何用逗号作为千位分隔符来输出数字?

在线将 CSV格式转换成Markdown Table表格的工具

tableConvert

python如何把两个字典像这样相加?

二、Hadoop相关

hdoop fs -test
hdfs dfs -put ...
从本地文件系统中复制单个或多个源路径到目标文件系统。也支持从标准输入中读取输入写入目标文件系统

三、Spark SQL相关

空值处理
PySpark na.fill在DF中未将空值替换为0
pyspark join 出现重复列的问题
填充值,和当前列的数据类型要一致,才能够填进去:
spark的df.na.fill()填充值注意的地方

Spark中广播变量(broadcast)使用

四、Linux shell相关

shell中echo命令详解

linux复制一行或几行数据到另一个文本

【原创】Linux基础之linux常用命令之文本替换

linux下vim 选择文本,删除,复制,粘贴

五、time & datetime

datetime.timedelta() 找两个时间之间的时间差,
datetime.timedelta
参数可以是

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

一些代码结构上的学习:

  • 是一层层套上去的
  • 可以设置任务的执行列表,长度为n,当第一个执行完且没有错误(在程序执行完之后会有一个状态的返回),再执行下一个任务;
    如果任务执行失败,会有一个错误信息,将这个信息写入到一个日志文件中去(在此之前需要在utils文件中写一个log_config.py的文件
六、Code

1、将spark中list转化为dict,其中list元素为Row变量
背景:list是df.collect()转化得来的。

# [Row(appid=u'0', game_price=u''), Row(appid=u'100257', game_price=u''), Row(appid=u'100383', game_price=u'')]
# 1. 建立map函数
# 2. 建立reduce 函数
def d2d(d1, d2):
	# 在python3中可行,但是在python2中不行
	return {**d1, **d2}
# or
def d2d(d1, d2):
	res = {}
	res.update(d1)
	res.update(d2)
	return res
collect_li = [Row(appid=u'0', game_price=u''), Row(appid=u'100257', game_price=u''), Row(appid=u'100383', game_price=u'')]

result = reduce(d2d, map(lambda x: x.asDict(), collect_li))
# result : {'0': '', '100257': '', '100383': ''}

2、spark查表判断用户是否是新用户,并且进行统计
具体描述

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/589414.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号