python - 使用 Pyspark 运行 Python 脚本时出现 py4j.protocol.Py4JJavaError
问题描述
所以,我是 Spark 和 PySpark 的新手。我正在尝试运行 Python 脚本以从 MySql 数据库中读取数据,如以下代码所示:
from pyspark.sql import SparkSession
from pyspark.sql import SQLContext
sc = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.config("spark.some.config.option", "some-value") \
.getOrCreate()
def mysql_connection():
sql = SQLContext(sc)
dataframe = sql.read.format("jdbc").options(
url="jdbc:mysql://localhost/evidencia",
driver="com.mysql.cj.jdbc.Driver",
dbtable="estados",
user="root",
password="").load()
output = dataframe.collect()
print ("_____________ OUTPUT _____________")
print (output)
mysql_connection()
加载部分没问题,但是在数据帧上运行collect()
或任何其他方法时,会显示以下错误:
回溯(最后一次调用):文件“/home/gustavo/Documentos/TCC/prototipo/connections/MysqlConnection.py”,第 27 行,在 mysql_connection() 文件“/home/gustavo/Documentos/TCC/prototipo/connections/ MysqlConnection.py”,第 22 行,在 mysql_connection 输出 = dataframe.collect() 文件“/usr/local/spark/python/lib/pyspark.zip/pyspark/sql/dataframe.py”,第 466 行,在收集文件中“ /usr/local/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py”,第 1257 行,通话中 文件“/usr/local/spark/python/lib/pyspark.zip/pyspark/sql/utils.py”,第 63 行,在 deco 文件“/usr/local/spark/python/lib/py4j-0.10.7- src.zip/py4j/protocol.py",第 328 行,在 get_return_value py4j.protocol.Py4JJavaError:调用 o51.collectToPython 时发生错误。: org.apache.xbean.asm5.ClassReader.(Unknown Source) at org.apache.xbean.asm5.ClassReader.(Unknown Source) at org.apache.xbean.asm5.ClassReader.(Unknown Source) 的 java.lang.IllegalArgumentException ) 在 org.apache.spark.util.ClosureCleaner$.getClassReader(ClosureCleaner.scala:46) 在 org.apache.spark.util.FieldAccessFinder$$anon$3$$anonfun$visitMethodInsn$2.apply(ClosureCleaner.scala:449)在 scala.collection 的 org.apache.spark.util.FieldAccessFinder$$anon$3$$anonfun$visitMethodInsn$2.apply(ClosureCleaner.scala:432)。
我已经搜索过这个错误,但我找不到解决方案。
我正在使用 Python 3.6.6 和 Spark 2.3.2 的 Anaconda 虚拟环境
我使用以下命令运行脚本(使用 Ubuntu 18.04 BTW):
$SPARK_HOME/bin/spark-submit --jars /usr/share/java/mysql-connector-java-8.0.12.jar ~/Documentos/TCC/prototipo/connections/MysqlConnection.py
如果需要更多信息来理解问题,请问我:
谢谢。
解决方案
因此,显然,Java 版本导致了问题。
我使用的是 openjdk-11.0.2 并切换到 java oracle 8,脚本运行得很好。
推荐阅读
- android - Android Studio 选择布局不起作用(Material.NoActionBar.Fullscreen)
- visual-studio-code - Visual Studio 代码未显示有关库属性和方法的提示
- networking - DNS在传输层使用UDP协议时如何可靠?
- python - Python将排行榜从最高到最低分数和前5名排序(外部文件)
- javascript - 加载所有内容后的 JS 警报
- terminal - 如何更改 teraterm 终端输入大小?
- rust - 为什么普通匹配表达式可以编译,而 map_err 调用却不能?
- r - 在成对的参数组合上应用函数
- java - 如何防止 primefaces ajax 调用禁用我的脚本
- python - python cmd中的中心输入?