本地运行PySpark时读取CSV文件失败,执行无响应
解决Spark本地Windows环境读取CSV卡死问题
可能的原因及修复步骤
1. 修正文件路径格式
Windows系统的路径分隔符为反斜杠\,单正斜杠的相对路径可能出现解析异常,建议改用以下两种方式:
- 使用绝对路径:
staticDataFrame = spark.read.format("csv") .option("header", "true") .option("inferSchema", "true") .load("C:/your-full-path/data/retail-data/by-day/*.csv")
- 使用原始字符串格式的相对路径:
staticDataFrame = spark.read.format("csv") .option("header", "true") .option("inferSchema", "true") .load(r".\data\retail-data\by-day\*.csv")
2. 禁用Schema自动推断
inferSchema参数需要扫描全量数据推断字段类型,Windows环境下可能因文件系统交互问题卡住。建议手动定义Schema跳过推断:
from pyspark.sql.types import StructType, StructField, StringType, IntegerType, DoubleType # 示例Schema,可根据实际CSV字段调整 staticSchema = StructType([ StructField("InvoiceNo", StringType(), True), StructField("StockCode", StringType(), True), StructField("Description", StringType(), True), StructField("Quantity", IntegerType(), True), StructField("InvoiceDate", StringType(), True), StructField("UnitPrice", DoubleType(), True), StructField("CustomerID", IntegerType(), True), StructField("Country", StringType(), True) ]) staticDataFrame = spark.read.format("csv") .option("header", "true") .schema(staticSchema) .load("./data/retail-data/by-day/*.csv")
3. 调整Spark及Java环境配置
- 确认本地Spark使用的Java版本为8或11(Spark 3.x系列仅推荐这两个版本,高版本易出现兼容问题)。
- 加大Spark驱动内存,避免内存不足导致假死:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("RetailDataLoad") \ .config("spark.driver.memory", "4g") \ .getOrCreate()
4. 检查文件状态
- 确认CSV文件未被其他程序占用(如Excel打开文件),导致Spark无法读取。
- 验证单个CSV文件是否损坏:用记事本打开文件,检查是否存在格式异常、超大行等问题。
5. 临时关闭Windows Defender实时保护
Windows Defender的实时扫描可能拦截Spark读取文件的操作,临时关闭后再测试程序运行情况。
内容的提问来源于stack exchange,提问作者NoName_acc
相关产品推荐
相关产品推荐

