自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Jimmy and Zoey

每周一更,培养码字习惯

  • 博客(48)
  • 收藏
  • 关注

原创 python打印exception信息

因为我try部分写的业务逻辑复杂,配置了多少活动,就跑多少个。在生产运行的时候,非常害怕因为一个活动的某些原因报错,导致后续活动都无法正常计算。报错类型我也不能保证是哪一种,就这样了。但如果失败,不打印失败信息,我要把try…except语句去掉运行,重跑一次看错误信息。但有一次真的生产上某些活动失败了,改脚本和重启有点费劲,就知道下次不能这么干了。一直以为掌握以下内容就够了。

2024-05-21 14:41:54 316

原创 pyspark.sql.utils.AnalysisException: Parquet data source does not support null data type

起因是我有几个字段是这样定义的,df.selectExpr(”null as A”,”null as B”),当然不知道A和B原本应该是什么类型了。我使用df.fillna(value=‘’,subsets=[“A”,”B”])没用,我打印出来的A字段类型类型还是null,所以只能强制转换类型了。没用的原因应该是没有转换类型,你就填充一个别的类型,spark不答应吧。这个错误见过很多次了,每次都没有追根究底,也忘了每次怎么调的bug就好了。就这样,转换一下类型,别是null类型就可以了。

2024-05-21 10:45:52 274

原创 得到hdfs目录下的文件名及修改日期

但是我看了下,这个库这个表每天的数据大约200MB,总文件量少说100G了。每次从这个总量里捞出昨天的数据,大海捞针啊,关键几小时跑不出来,不能凑合了…(其实这个表其他库有这样增量的,/user/yyy/A/yyyyMMdd/,这是正常的。hdfs目录下,叫A表吧,hdfs路径假如是/user/xxx/A/,每天是append写入这个目录下,这个目录下全是parquet文件。工作中有一张表,非常大,没那么常用,但有时又得用,是增量更新的。这样我就可以只读取今天更新的文件了(是昨天的内容,T+1)

2024-05-16 15:52:21 340

原创 count distinct在spark中的运行机制

现在所有行可以合并成一个partition,再次HashAggregation,但这次不用group by product, category和gid现在再也没有重复值了,简单的count和根据gid筛选就可以得到想要的count distinct结果。

2023-12-25 22:35:19 961

原创 pyspark读取数据库性能优化

dbtable和query配置不能同时存在,选一种即可。里面都可以直接写sql语句如果dbtable是一个表,如果load()后进行where和select,都会把整张表加载进来,耗内存。直接写sql语句比较好。

2023-12-03 19:33:15 501

原创 pyspark读取mongo格式混乱,读取列缺失问题解决

问题2:mongo里的数据可能有点脏,某列A可能既有long int格式,又有string格式。如果pyspark自动推断schema,可能识别成string格式,然后它遇到了少量的long int格式,就报错了,说string格式无法转换为long int。pyspark读取mongo的schema是自动推断的,随机筛选1000行推断schema,如果这一千行都没有某列,那么这列就缺失了。然而实际操作,发现定义了2列的模式,那么结果就只有2列。解决办法是,自己定义schema,而不是自动推断。

2023-07-20 12:16:57 266

原创 python读取命令行传进来的参数-argparse

添加optional argument,有add_argument(“–a”,type=int,help=“xxx”)默认是可选的,意味着可以不用填写添加positonal argument,add_argument(“a”,type=int,help=“xxx”)默认是不可选,必须填写,否则报错添加flags,标记,开关那种形式 action argument比如,添加一个参数,是否需要打印信息,--verbose表示打印详细信息命令行输入。

2023-05-05 20:14:17 377 1

原创 sparksql中json处理

get_json_object, to_json使用

2022-10-12 11:28:31 1163

原创 sparksql date类型操作,date和字符串互相转换

sparksql date类型使用,date类型和字符串相互转换

2022-08-16 13:09:14 5756

原创 python中self的含义和使用

python中self的含义,什么时候要用self

2022-08-15 23:50:58 512

原创 pyspark join用法总结

文章目录DSL(Domain-Specific Language)形式inner, full, left, right, left semi, left anti, self join多表join关联条件多个的joinsql形式参考文献DSL(Domain-Specific Language)形式join(self, other, on=None, how=None)join() operation takes parameters as below and returns DataFrame.

2022-04-09 21:04:35 5043

原创 pyspark读写mongo的技巧和坑

技巧每次把数据写入mongo,mongo都会自动创建_id字段,mongo中_id字段是唯一的,mongo会为这个字段自动建立索引。写mongo之前可以指定_id的值,这样当你的写入mode是Append的时候,你的记录写入mongo,如果不存在该_id,那么就添加改记录,如果存在该_id,那就覆盖原来_id对应记录的值。这样,比如你要往mongo里加4条记录,在你调试你的代码的时候,可以写这4条记录无数次,反正每次这4条记录都会被覆盖。假设user表里有字段ID(唯一),name,income,要

2022-03-26 11:43:44 3331

原创 pyspark读写mongo数据库

读写mongo方式一from pyspark.sql import SparkSessionmy_spark = SparkSession \ .builder \ .appName("myApp") \ .config("spark.mongodb.input.uri", "mongodb://127.0.0.1/test.coll") \ .config("spark.mongodb.output.uri", "mongodb://127.0.0.1/test.co

2022-03-26 11:32:03 3279

原创 pyspark读取mysql和oracle

读写数据库一开始我使用的是方式三,后来感觉代码太长满足不了我强迫症的需求,现在有了方式一,勉强行吧。mysql和oracle写法的格式一样。数据库配置user,password,driver='xxx','yyy','zzz'url = 'jdbc:mysql://host:port/database'prop = {'user': user, 'password': password,'driver': driver}方式1最短的写法,我比较喜欢,尤其是读数据库次数较多的时候data =

2022-03-26 11:17:31 1264

原创 pyspark-UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters...

公司的测试环境无法打印中文,根据报错信息找了好多解决方案都没成功。历尽千辛万苦,终于有一个能成功了。import sysimport codecs sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())print("中文")原文链接python3报错处理:UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0-1...

2021-12-28 20:22:13 1014

原创 pyspark-用户自定义函数udf

在PySpark中,你用python语法建立一个函数,然后用PySpark SQL中的udf()方法在dataframe中使用,或将其注册成udf并在sql中使用。例1 通过select()使用UDFfrom pyspark.sql.functions import col, udffrom pyspark.sql.types import StringTypedef convertCase(str): resStr="" arr = str.split(" ") for

2021-12-28 20:12:33 2308

原创 nohup输出日志文件

1 前言1 代表stdout 标准输出2 代表stderr 标准错误1.1 标准输出1.1.1 标准输出,日志文件覆盖command > output.txtcommand 1> output.txt以上两句等价。将命令的stdout重定向至文件,stdout将不会出现在终端。如果文件已经存在,将会覆盖。1.1.1 标准输出,日志文件追加command >> output.txtcommand 1>> output.txt以上两句等价。将命令

2021-12-16 22:04:47 9218

原创 python, pyspark导入自定义包

假设我自定义包的目录在D:\dir1\dir2\里, 里面有parent包,包括p1.py, p2.py, 两个文件分别由p11和p22两个方法import sys# 将包含parent包的路径添加进系统路径sys.path.append(r"D:\dir1\dir2")import parent.p1 as p1import parent.p2 as p2p1.p11()p2.p22()或者直接将parent这个包放在当前目录下,那么可以直接写import parent.p1 as p

2021-12-15 22:21:06 3850

原创 pyspark根据正则表达式选择列

python正则表达式见python正则表达式入门pyspark.sql.DataFrame.colRegex方法可以根据正则表达式选择列。例1:选择所有BASE_开头的列df.select(df.colRegex("`(BASE_)+.+`")).show()()表示组,’+‘表示前面的表达式出现一次或以上,’.‘代表任意一个字符。(BASE_)代表组,第一个’+‘代表前面的BASE出现一次或以上,’.‘代表任意单个字符,第二个’+'代表前面的任意字符出现一次或以上。整行代码的意思为列名必须为

2021-12-14 19:50:20 1766

原创 pyspark写入elasticsearch及注意点

1 dataframe写入es'''es_url: ip地址es_port:端口es_user:用户名es_pass:密码'''spark=SparkSession.builder\ .config("spark.es.nodes",es_url)\ .config("spark.es.port",es_port)\ .config("es.net.http.auth.user",es_user)\ .config("es.net.http.auth.pass",es

2021-12-12 21:32:16 2072

原创 pyspark数据类型转换-withColumn,select,selectExpr,sql四种方式

pyspark中数据类型转换共有4种方式:withColumn, select, selectExpr,sql介绍以上方法前,我们要知道dataframe中共有哪些数据类型。每一个类型必须是DataType类的子类,包括ArrayType, BinaryType, BooleanType, CalendarIntervalType, DateType, HiveStringType, MapType, NullType, NumericType, ObjectType, StringType, Stru

2021-12-08 22:30:21 9490

原创 shell下文件UTF-8格式转换为gbk

shell下文件UTF-8格式转换为gbk的语法为iconv -c -f utf8 -t fileName1.csv > fileName2.csv-c代表从输出中忽略无效的字符。要注意,没有-c如果文件中有非gbk编码,文件转换会在非gbk字符处截断,后面的文件内容会直接没有(工作中一开始不知道被坑了好几次…)。文件异常截断时有如下类似报错信息。iconv:未知31063处的非法输入序列...

2021-12-06 20:48:47 2189

原创 用通配符指定文件名集-glob

在计算机编程中,glob 模式用通配符指定文件名集。我正在使用pyspark,我想用一种表达方式来读取文件名集合。假设目录/dir1/dir2/下有2020年和2021年全部的数据,每天的数据放在该天目录下,即2021年7月1日的数据放在20210701目录下,如果我想读取2021年全部的文件,只需以下代码spark.read.load("/dir1/dir2/2021*")但如果我只想读取2月份和3月份的所有数据呢?开始我的思路是用正则表达式表示,但python中我对正则表达式一窍不通,然后我去

2021-12-05 23:15:42 345

原创 python正则表达式入门

文章目录1 特殊字符罗列匹配某种字符类型特殊字符1 .:表示匹配除了换行符之外的任何单个字符特殊字符2 *:表示匹配前面的子表达式任意次,包括0次特殊字符3 +:表示匹配前面的子表达式一次或多次,不包括0次特殊字符4 {}:匹配连续多次特殊字符5 \:转义元字符特殊字符6 []:匹配里面任意一个字符特殊字符7 ^:起始位置特殊字符8 $:结束位置特殊字符9 ():组选择特殊字符10 ?:表示匹配前面的子表达式0次或1次2 re包方法2.1 re.match(pattern, string, flags=0)

2021-12-05 22:25:33 1154 1

原创 《基金定投:让财富滚雪球》读书笔记

这是我看的第二本关于基金定投的书。这本书实操性比较强,值得一看。定投金额长期投资目标确定法:计算实现一目标需要多少资金,并将其拆分数十个月的金额,比如:5年后想要攒下10万元买辆新车,假如每月定投一次的话,需要投多少钱?每月闲钱计算法:每月闲钱=(月收入-月支出)÷2周定投vs月定投周定投的投资总收益率要稍高于月定投,主要因为周定投频率快,资金更分散投入,有利于投资者用相同的资金买到更多的基金份额。周定投可以选择每周的周四或周五,月定投可以选择每月的25日到28日进行扣款;

2021-12-05 13:43:30 579

原创 《定投十年财富自由》读书笔记

书中分三大块第1块:思想建设。我们要有正确的理财观,做记账和预算。定投是为了强制储蓄,保值增值。第2块:基础知识。指数基金具有长生不老,长期上涨且费用低廉的好处。介绍了宽基指数和行业指数,市值加权和策略加权。宽基指数在A股中常见为沪深300,中证500,创业板指数;港股常见的是恒生指数,H股指数,香港中小指数;美股常见的纳斯达克100指数,标普500指数。策略加权指数看红利指数、基本面指数、价值指数、低波动指数。要掌握优秀的行业指数基金,消费和医药行业天生容易赚钱。第3块:如

2021-11-16 22:33:53 369

原创 spark优化之编程方式汇总

spark优化有两个方向,一是写好的代码,二是合理配置资源。本文讲述的是第一种思路,内容来源于Spark Performance Tuning & Best Practices,sparkbyexample是个很好的网站,除了是全英文,没有缺点。以下为整理的spark程序优化思路:使用DataFrame而不是RDD。这得益于钨丝计划项目和catalyst优化器的优化。钨丝计划能提高spark任务的内存和cpu效率,catalyst优化器是个整合的sql查询优化器。使用coalesce(

2021-11-11 21:11:29 1457

原创 spark的cache(),persist(),unpersist()方法及需要注意的细节

1 cache(), persist()和unpersist()原文链接:Spark DataFrame Cache and Persist Explainedspark中DataFrame或Dataset里的cache()方法默认存储等级为MEMORY_AND_DISK,这跟RDD.cache()的存储等级MEMORY_ONLY是不一样的。理由是重新计算内存中的表的代价是昂贵的。MEMORY_AND_DISK表示如果内存中缓存不下,就存在磁盘上。spark的dataset类中的cache()方法内部

2021-11-11 20:55:44 10237

原创 sparksql优化之join

文章目录前言1 概念:流式遍历表(streamIter)和查找表(buildIter)2 概念:sparksql种3种join的实现方式3 4种join方式参考文献前言本文是以下两篇文章的总结。Spark SQL join的三种实现方式 - 多读书多看报 - 博客园 (cnblogs.com)Spark SQL 之 Join 实现 - 云+社区 - 腾讯云 (tencent.com)1 概念:流式遍历表(streamIter)和查找表(buildIter)流式遍历表(streamIter)和查

2021-11-07 15:51:32 2029 2

原创 excel里vlookup函数使用

名不见经传大数据工程师工作经验领导给甲和乙同样的任务。甲给出3列,客户证件号,消费金额,消费日期,4行数据,乙给出同样的3列,5行数据。甲和乙给出的数据顺序都是随机的。领导想知道甲和已给出的数据有什么区别。上图,左边3列是甲的数据,右边3列是乙的数据,第i列是从E列中匹配的甲的同样证件号的乙的消费金额看甲乙两人的数据是否一致。得到以上效果只需在I2单元格输入=VLOOKUP(E3,$A$2:$C$5,2,0)vlookup(查找值,查找范围,留下第几列,FALSE)#FALSE是精确匹配,0=

2021-11-03 21:37:53 696

原创 pycharm使用技巧-换行

python脚本有时一行代码写的非常长,一个屏幕塞不下,左右拉动滚动条视觉不友好。第一种方法:python里有换行标识"\",如jfdb=spark.read.format("jdbc").option("driver", mysql_driver).option("url", mysql_url).option("dbtable", "xxxxxxxxxxxxxxxxxxxxxxxx").option("user", mysql_acount).option("password", mysql_pa

2021-08-18 22:53:46 14355

原创 python-读取目录下所有txt文件并转化为一个excel的多个sheet

读取目录下的所有文件的代码如下。import osfor root, dirs, files in os.walk('./TXT转excel'): print(root) #当前目录路径 print(dirs) #当前路径下所有子目录 print(files) #当前路径下所有非目录子文件将目录下的所有txt文件存入一个excel中,每个txt存入到一个sheet里,分隔符为逗号。import osimport pandas as pdwriter = p

2021-08-17 22:50:03 1845 3

原创 硕士论文latex参考文献格式经验

我感觉我是个半成品硕士,发的论文参考文献格式部分我没有多参与,导致写硕士论文的时候还不知道参考文献格式怎么才算标准的。我用latex写的毕设论文,一般在.bib文件里插入一个从google scholar或semantic scholar复制来的bibtex格式,我就以为是很标准的格式的了,不用调了。复制来的bibtex格式示例如下,@inproceedings{reddi2016stochastic, title={Stochastic variance reduction for nonc

2021-05-16 20:35:17 3188

原创 cluser point 聚点 介绍及使用经验

文章目录1 聚点基本知识1.1 聚点的定义1.2 聚点的性质1.3 聚点的重要定理2 聚点常用在哪些地方2.1 用在哪里2.2 如何使用参考文献本人才疏学浅,竟被这个概念折磨了一年之久。研究生生涯,真的是太惭愧了。本文对聚点的介绍侧重于理解。1 聚点基本知识1.1 聚点的定义聚点,英文叫cluster point,或者limit point,是无穷数列{xk}\{x^k\}{xk}的一个性质。注意,有限的数列是没有聚点的。聚点的定义:翻译一下就是,若c是数列A的一个cluster point

2021-03-27 20:03:56 3964 2

原创 texstudio使用技巧

科研道路快要告一段落了,不知道以后latex用的还多不多。感觉latex还是挺不会使用的。1 源代码和PDF对应位置跳转如图,texstudio分为两栏,我把左边叫做编辑栏,右边叫做预览栏吧。在左边代码代码处右键,可以看到go to pdf选项,可以跳到预览栏的对应位置。(我用latex两年了才发现这个,我都惊了)在右边pdf处右键,可以看到go to source选项,可以跳到左边对应代码位置。左侧代码编辑处显示行号默认代码编辑处是不显示行号的,遇到报错信息第几行就找的比较麻烦。找到菜单栏

2021-03-27 16:07:17 4637

原创 jupyter notebook使用心得,小技巧

一直以来都是个伪python使用者,菜,并且习惯于使用jupyter notebook,不敢用.py程序,现在正在慢慢改正中。但在过程中积累的关于jupyter notebook的使用小心得还是希望能记录下来1 显示目录:安装jupyter notebook插件jupyter_contrib_nbextensions安装这个最开始的想法是希望jupyter notebook有目录功能。1.1 window端如何安装在本地,用conda安装报错,放弃了,然后根据Jupyter Notebook 添加目

2021-03-27 15:40:54 654

原创 latex-cleveref使用

1 cleveref介绍cleveref包,顾名思义,就是聪明地引用。比如当你定义一个定理(theorem)的标签是\label{thm:firstTheorem},你使用了\Cref{thm:firstTheorem},latex就会显示theorem xx,如果你使用的是\ref{thm:firstTheorem},latex只会显示xx,theorem需要你自己加上。cleveref对图片,表格,定理,引理,算法环境都是适用的。2 cleveref使用需要的包,hyperre.

2021-03-27 15:19:13 11836

原创 CVX的安装-windows, linux通用

先到这里下载CVX的安装包,然后解压。解压后得到CVX文件夹。打开matlab,改变目录到这个CVX文件夹里,运行cvx_setup.m这个文件就可以啦。官方安装指南在这里~

2021-02-16 18:59:12 832

原创 L-smooth,L-Lipschiz continuous,continuously differentiable含义理解和区分

经常遇见,以为自己懂了,实际上根本不懂,特地总结一下。L-Lipschitz continuous(利普西茨连续)关注的是f(x)本身,而L-smooth指梯度∇f(x)\nabla f(x)∇f(x)是L-Lipschitz continuous的函数。L-Lipschitz continuous的定义:L-smooth的定义:∇f(x)\nabla f(x)∇f(x)是Lipschitz continuous(利普西茨连续)是比仅仅continuous(连续)更强的条件,所以任何differ

2021-01-15 11:48:32 10595 2

原创 latex-\ref引用标号不正确的问题

写论文时,用到一个算法框架,形式如下:\begin{algorithm}[H]\label{alg.l1} \caption{算法标题} \begin{algorithmic}[1] \STATE \textbf{Input:}初始参数输入 \REPEAT \STATE 算法步骤语句 \UNTIL{终止条件} \STATE \textbf{Output:} 输出解 \end{algorithmic} \end{algorithm}之后引用\ref{alg.

2021-01-13 16:20:52 9087 9

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除