当前位置: 首页 > news >正文

旅游网站怎样做网络宣传黑龙江网络公司网站建设

旅游网站怎样做网络宣传,黑龙江网络公司网站建设,协会门户网站建设,顺企网官网企业名录使用Shell传参解决DataPhin中PySpark不支持中文的问题 背景 笔者开发PySpark任务时【别问为神马不用Java和Scala打Jar包的方式,PySpark不需要打包所以开发效率极高,早点搞完早点下班】,遇到一个令所有SQL Boy都很头疼的问题,那就…

使用Shell传参解决DataPhin中PySpark不支持中文的问题

背景

笔者开发PySpark任务时【别问为神马不用Java和Scala打Jar包的方式,PySpark不需要打包所以开发效率极高,早点搞完早点下班】,遇到一个令所有SQL Boy都很头疼的问题,那就是一旦Python脚本中出现中文,该PySpark任务就报错且无法运行。所以人才们当然是异常机智,先搞个中间表把中文改成拼音,PySpark跑完了再搞个Hive On Tez任务把拼音改回中文,这种笨办法只适合于中文值的种类屈指可数的场景。

由于PySpark任务不能像Hive On Tez任务那样由DataPhin自动解析血缘和依赖,还不支持中文,所以SQL Boy们也是一度灰常嚣张,总觉得Hive On Tez任务就是最好的任务。只有遇到Tez极其严重的性能问题,才会想起来Spark的好处。

作为曾经的平台开发攻城狮,自然是不能让这股风气蔓延,不然大家都变成SQL Boy了,还和Oracle数据库开发攻城狮有啥区别。。。势必解决这个问题。

解决方式

既然Py文件中不能写中文,而我又要用中文,那么借鉴Java开发中常见的前后端Json传参的方式,我也可以Shell给Py文件动态传参,这样Py文件中就完美的规避了中文的明文,自然Py不会报错,而参数值又可以让Python调用系统方法拿到。所以可以这么尝试:

echo "START"
cat > zhiyong.py <<E0F 
# -*- coding: UTF-8-*import sys 
reload(sys)
sys.setdefaultencoding('utf-8')from pyspark.sql import SparkSession 
spark = SparkSession \.builder	\.appName("project_week_his_incre_daily_prod")	\.config("hive.exec.dynamic.partition","true")	\.config("hive.exec.dynamic.partition.mode","nonstrict")	\.getOrCreate()str_bizdate=sys.argv[1]str_param1=sys.argv[4].strip()
str_param2=sys.argv[5].strip()
str_param3=sys.argv[6].strip()sq11="""select '""" + str_param3 + """' as str_param3"""
spark.sql(sql1).show()EOFhive_db1="hive_db_name1"
hive_db2="hive_db_name2"
STR1="中文1"
STR2="中文2"
STR3="中文3"spark-submit --master yarn --deploy-modeclient --driver-memory 4G --executor-memory 4G --executor-cores 1 --conf spark.dynamicAllocation.enabled=true --conf spark.dynamicAllocation.minExecutors=10 --conf spark.dynamicAllocation.maxExecutors=50 --confspark.memory.fraction=0.95 --confspark.shuffle.service.enabled=true --conf spark.ui.port=4180 --conf spark.port.maxRetries=128--conf spark.rpc.timeout=600s --conf spark.debug.maxToStringFields=4096 --conf spark.sql.crossJoin.enabled=true --conf spark.sgl.broadcastTimeout=600s --conf spark.sql.autoBroadcastJoinThreshold=-1 zhiyong.py ${bizdate} hive_db1 hive_db2 $STR1 $STR2 $STR3

经过验证,果然可以show出传入的中文参数!!!

原理

这个cat重定向的py文件不支持直接写中文,大概率是Encoder的问题。但是Shell本身可以正常写中文参数,说明Linux Node的中文语言包和character set正常,那么只需要在外层的Shell预先构建变量,再通过spark-submit提交这个py文件时传入这些内容为中文的String参数,即可在Python脚本中动态获取到变量的值,再去拼接SQL字符串给Spark的算子使用。Python文件中依旧不能有明文的中文。

SQL和拼接的其它中文字符串的注释可以用#注释掉,写在Shell的头上。

进一步排查

这么做,给SQL Boy们使用已经足够了,毕竟他们之前只搞过Oracle数据库开发当然也就只会SQL,除此之外没啥会的东西了。

但是从平台开发的视角,其实还是可以做进一步的分析。笔者的PyCharm一般是用Python3.7,这么搞PySpark任务即便有中文也跑的很欢快。出现这种情况,首先发现租来的阿里云DataPhin还是老掉牙的Python2.6,那么:

echo "START"
cat > zhiyong.py <<E0F 
# -*- coding: UTF-8-*

给Py文件的头上+个这玩意儿,期望当然是可以识别中文。

但是本地、扔服务器都可以跑有中文参数/SQL的PySpark任务,就是扔DataPhin跑不起来。。。

于是手动cat生成的py文件,发现了惊天大秘密:DataPhin解析有问题,把#的这一行当Linux的注释给filter了。。。

属实无语的操作。。。

所以更改脚本的解析方式,或者把基础环境的python升级到3.7都是个比shell传参更好的主意。平台的事情,就不是SQL Boy能解决的了。

转载请注明出处:https://lizhiyong.blog.csdn.net/article/details/129699142

在这里插入图片描述

http://www.yayakq.cn/news/376713/

相关文章:

  • 建立网站的方案中国网重庆频道
  • wordpress更改链接后网站打不开数字营销的定义
  • 电子商务基础网站建设高端网站开发哪家强
  • 学校 网站 建设 目的南京酒店网站制作
  • 怎么做网站维护宣传查看网站服务器信息
  • 洛阳 网站建设公司哪家好店铺推广怎么做
  • 怎么做单页网站织梦怎么做淘客网站
  • 装饰公司网站设计企业网站排名提升软件智能优化
  • 网站被黑了企业网站建设基本流程
  • 做网站公司排行网络营销是什么时候兴起的
  • 凉山州建设银行官方网站京东云擎 wordpress
  • 网站做哪些比较赚钱企业网站流程图
  • 四川通管局网站曲沃网站建设
  • 丝路云网站建设小学网站建设工作小组
  • 网站用什么语言开发的网站找哪家做
  • 企业做网站的必要性深圳app网站建设哪家好
  • 一级a做爰片在线看网站网站为什么做黄词骗流量
  • 设计网站数据建设网站不要服务器可以吗
  • 如何网站建设网页网页设计与制作论文1000字
  • 网站建设黄荣百度写作助手
  • 阿里云配置网站专业做网站的公司
  • 有口碑的盐城网站开发wordpress是英文版
  • 简单个人网站制作流程网站主题模板下载不了
  • 绿色主色调网站查logo的网站
  • 网站开发 技术难点做第三方库网站
  • 西安网站制作多少钱wordpress修改导航字体
  • 保健品 东莞网站建设北京终端区优化
  • 网站设计做图工具360网站免费推广怎么做
  • 求一个全部用div做的网站安徽省建设干部网站
  • server 2008 iis部署网站微信小程序如何搭建