Windows环境下PySpark写入Parquet文件报Py4JJavaError如何解决
问题1:TypeError报错修复
你通过rddDF = spark.createDataFrame([rdd1],schema=schema1)掩盖了类型错误,没有解决根因。该报错的本质是你的RDD元素结构和定义的schema不匹配,大概率是RDD中混入了表头行(即包含close等字段名的字符串行)。
修复步骤:
- 先验证RDD内容:执行
print(rdd.take(2))查看前两条数据,确认第一条是否为表头 - 过滤表头后再构建DataFrame:
# 提取并过滤表头行 header = rdd.first() rdd_data = rdd.filter(lambda x: x != header) rdd1 = rdd_data.coalesce(partitions) # 不要给rdd1套列表,直接传入创建DataFrame rddDF = spark.createDataFrame(rdd1, schema=schema1)
问题2:UnsatisfiedLinkError报错修复
该报错是Windows平台运行Spark的经典适配问题,和环境变量配置无关,是Hadoop缺少Windows原生适配文件导致的,按以下步骤操作即可修复:
- 检查
%HADOOP_HOME%\bin目录下是否存在对应Hadoop版本的winutils.exe、hadoop.dll文件,没有的话下载对应版本的Hadoop Windows适配包,将两个文件放到bin目录下 - 配置Spark关闭原生权限校验,创建SparkSession时添加如下配置:
spark = SparkSession.builder \ .config("spark.hadoop.fs.file.impl", "org.apache.hadoop.fs.RawLocalFileSystem") \ .getOrCreate()
- 如果上述配置无效,修改
%HADOOP_HOME%\etc\hadoop\hadoop-common.xml,添加配置项:
<property> <name>hadoop.native.lib</name> <value>false</value> </property>
- 若依然报错,将
hadoop.dll文件复制到C:\Windows\System32目录,重启Jupyter和Spark会话后重新运行即可
额外注意
你原代码中的存储路径存在语法错误,双引号嵌套非法,修改为:rddDF.write.parquet("C:/Users/User/Documents/File/Output/rddDF")
内容的提问来源于stack exchange,提问作者StackBotSS
相关产品推荐
相关产品推荐

