最近在学习spark,在本地win10,连接虚拟机spark,用pyspark操作分布式集群进行数据分析和绘图,遇到了一下bug,这里记录一下。
1、检查本地和集群的python、java、spark版本,尽可能保证一致
2、NameError: name 'memoryview' is not defined
python版本是2.6.6的,版本太低,升级版本
记录一下看到的编译python时两个make的区别
注意:make install 与 make altinstall的区别: install 除了做 altinstall 外还会做 bininstall , maninstall 共三个动作,bininstall 就是在处理 Symbolic Link Chain 的相关事务, 而 maninstall 则是在产生 unversioned manual pages, 所以, 很明显的, 不使用 bininstall 可以避免 python install 时 update link 的问题。如果使用make install,你将会看到在系统中有两个不同版本的Python在/usr/bin/目录中。这将会导致很多问题,而且不好处理。
3、pyspark读取json文件
报错:org.apache.spark.sql.DataFrame = [_corrupt_record: string]
解决方法有两种:
a、去掉文件中的换行符
b、spark.read.option("multiLine", true).json() 在读取json文件时,指定读取多行为真,option("multiLine", true)
4、WARN scheduler.TaskSchedulerImpl: Initial job has not accepted any resources
任务初始化失败,到master:8080端口上去看看spark job会发现,任务core为0.
解决办法
a、spark-env.sh上配置一下
export SPARK_WORKER_MEMORY=512m
export SPARK_WORKER_CORES=2
export SPARK_WORKER_INSTANCES=1
export SPARK_EXECUTOR_MEMORY=512m
b、检查一下 .set('spark.executor.memory', '1g') 是否超过了给虚拟机分配的内存, 减小一些就好了
5、Can’t assign requested address: Service ‘sparkDriver’ failed after 16 retries
sparkDriver错误 解决方法: 添加.set("spark.driver.host", "localhost")
6、使用pandas_udf报错
本人spark和pyspark都是2.4.5 先看jdk版本是否太够,推荐是1.8,没问题的话,就是pyarrow版本太高,降到0.14.1活更低就好了
7、SparkSql报错Use the CROSS JOIN syntax to allow cartesian products between these relations.
spark2默认不支持笛卡尔积 解决方法: 加入参数 set("spark.sql.crossJoin.enabled", True)
8、pbzip2: error while loading shared libraries: libbz2.so.1.0: cannot open shared object file: No such file or directory
先看试试 yum install bzip2-libs
如果不行就使用 find / -name libbz2.so 查找文件位置
做一个软链接libbz2.so.1.0,指向已经有的libbz2.so.1.0.4
cd /usr/llib64
ln -s libbz2.so.1.0.4 libbz2.so.1.0
再运行就好了
9、ModuleNotFoundError: No module named '_bz2'
python报错:
from _bz2 import BZ2Compressor, BZ2Decompressor
ModuleNotFoundError: No module named '_bz2'
缺少文件bz2的so文件
解决方法: 网上下载 _bz2.cpython-36m-x86_64-linux-gnu.so 文件, 放到python里面的lib-dynload下就好了(usr/python36/lib/python3.6/lib-dynload/)
-36m是版本,根据自己的python版本改一下就可以用
https://pan.baidu.com/s/1fHhxNiHOLKDqZ-9wHw3JTA
文件在这个博主文章上下载的 python解决 ModuleNotFoundError: No module named _bz2
10、pip使用出现错误
报错:
Can't connect to HTTPS URL because the SSL module is not available. - skipping
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
pip使用需要ssl模块,但是python默认编译是不可用的,所以要重新编译安装一下python
解决方法
a、删除python文件夹
b、安装openssl: yum -y install openssl-devel
c、加上--with-ssl: ./configure --prefix=/usr/local/python3 --with-ssl