Spark: py4j.protocol.Py4JJavaError: An error occurred while calling o91.showString.

博客讲述了在使用Spark的yarn模式执行Python脚本时遇到的Py4JJavaError问题。具体表现为尝试显示一个空DataFrame时出错。作者通过向test.test_table中添加数据解决了该问题,并指出不应将Python DataFrame的操作直接应用到Spark DataFrame上。
部署运行你感兴趣的模型镜像

@创建于:2022.06.15
@修改于:2022.06.15

利用Spark的yarn模式(把.py文件上传到hadoop平台),执行过程中发现了下面的问题。py4j.protocol.Py4JJavaError: An error occurred while calling o91.showString.

代码段如下:

df = spark.sql("select * from test.test_table")
print(type(df))
df.printSchema()
df.show(3)

log日志如下:

Traceback (most recent call last):
  File "/tmp/spark-0d83b9e6-2801-4a72-9713-5e3fba6f4cbe/main.py", line 44, in <module>
    df.show(3)
  File "/opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1425774/lib/spark/python/lib/pyspark.zip/pyspark/sql/dataframe.py", line 378, in show
  File "/opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1425774/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
  File "/opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1425774/lib/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", line 63, in deco
  File "/opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1425774/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py", line 328, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o91.showString.

问题解决:
test.test_table中是个空表,增加四条数据,就可以解决上述问题。

一点感受:
不能把python DataFrame的思想完全套用在Spark DataFrame中。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

`py4j.protocol.Py4JJavaError: An error occurred while calling o37.load` 是一个常见的 PySpark 错误,通常表示在调用 Java 方法 `load` 时出现了问题。以下是一些可能的原因及解决方法: #### 1. 缺少依赖库 如果是在连接数据库(如 MySQL)时出现该错误,可能是缺少相应的驱动程序。例如,连接 MySQL 时出现 `java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver` 错误,需要下载和 MySQL 数据库版本一样的驱动,并将其添加到 Spark 的类路径中。可以在启动 Spark 时通过 `--jars` 参数指定 JAR 文件的路径,或者将 JAR 文件添加到 Spark 的 `jars` 目录下。示例命令如下: ```bash spark-submit --jars /path/to/mysql-connector-java-x.x.xx.jar your_script.py ``` 参考类似情况如 Spark 连接 MySQL 报错及解决方式[^2]。 #### 2. 版本不兼容 不同版本的 PySpark、Java、Hadoop 等组件之间可能存在不兼容问题。需要确保这些组件的版本相互兼容。例如,降低 JDK 版本有时可以解决部分兼容性问题,但并非所有情况都有效。可以参考官方文档来选择合适的版本组合。 #### 3. 类路径问题 如果是使用某些特定的库(如 GraphFrames)时出现该错误,可能是相关的 JAR 文件没有被正确添加到 Spark 的类路径中。比如实例化 GraphFrame 出现 `Py4JJavaError: An error occurred while calling o310.loadClass` 问题,就是因为 GraphFrames 的 JAR 文件未正确添加到类路径。可以通过 `--packages` 参数在启动 Spark 时自动下载并添加所需的依赖包,示例命令如下: ```bash spark-submit --packages graphframes:graphframes:0.8.2-spark3.0-s_2.12 your_script.py ``` 参考实例化 GraphFrame 报错情况[^3]。 #### 4. 文件系统或数据源问题 如果是在读取 HDFS 上的数据时出现该错误,可能是文件系统配置不正确或文件路径不存在。需要检查 HDFS 的配置信息,确保文件路径正确,并且有相应的读写权限。例如读取 HDFS 上的数据报错 `py4j.protocol.Py4JJavaError: An error occurred while calling 047.saveAsTextFile`,需要检查文件路径和权限等信息[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值