Windows11下PySpark调用df.show()遇ShowString错误求助
排查与修复步骤:
检查JAVA_HOME路径合法性
Windows下Spark对路径敏感,必须确保JAVA_HOME指向纯英文无空格的路径(比如C:\Java\jdk-17,而非C:\Program Files\Java\jdk-17)。打开命令行执行echo %JAVA_HOME%和java -version,确认路径无特殊字符且Java版本为17。统一编码配置
Windows控制台默认编码为GBK,与Java 17默认的UTF-8编码冲突会触发ShowString错误。在spark/conf目录下复制spark-defaults.conf.template并重命名为spark-defaults.conf,添加以下配置:spark.driver.extraJavaOptions -Dfile.encoding=UTF-8 spark.executor.extraJavaOptions -Dfile.encoding=UTF-8对齐PySpark与Spark版本
虚拟环境中安装的PySpark版本必须和本地Spark版本完全一致(比如Spark 3.5.0对应pyspark==3.5.0)。执行pip show pyspark查看版本,不一致则用pip install pyspark==3.5.0重新安装。临时替代方案
若上述方法无效,可暂时用print(df.toPandas())替代df.show(),绕过控制台输出的编码问题(注意大数据量下效率较低)。补全winutils依赖
Windows下Spark依赖winutils.exe模拟Hadoop文件系统操作,需下载与Spark匹配的Hadoop版本对应的winutils(Spark 3.5对应Hadoop 3.3.x),放入Spark的bin目录,并配置HADOOP_HOME环境变量指向Spark安装目录。
内容的提问来源于stack exchange,提问作者Rpilli

