PySpark结构化流报错TypeError: path can be only a single string求助
问题
在本地Jupyter Notebook中使用PySpark运行结构化流,目标是从指定目录读取CSV文件并将输出流写入控制台,执行过程中出现报错。
配置Spark会话
spark = SparkSession.builder.appName("stream_from_folder").getOrCreate()
定义数据Schema
schema = StructType([StructField("date", StringType(), True), StructField("name", StringType(), True), StructField("age", IntegerType(), True), StructField("weight", IntegerType(), True)])
读取流的代码及报错信息
使用load()方法读取流时的代码:
inputDF= spark.readStream.format("csv").schema(schema).option("header",True).\ option("maxFilesPerTrigger", 1).load("C:/Users/mukun/Documents/datasets/stream_folder")
触发的报错:
File ~\anaconda3\lib\site-packages\pyspark\sql\streaming.py:467, in DataStreamReader.load(self, path, format, schema, **options) 462 if type(path) != str or len(path.strip()) == 0: 463 raise ValueError( 464 "If the path is provided for stream, it needs to be a " 465 + "non-empty string. List of paths are not supported."
改用csv()方法替代load()方法时,触发错误:
TypeError: path can be only a single string
问题原因分析
- Windows路径格式兼容性问题:你使用了
/作为路径分隔符,虽然Python本身支持,但PySpark在处理流式读取路径时,对Windows系统的路径格式要求更严格。建议改用Windows原生的反斜杠(需转义为\\),或者使用原始字符串(路径前加r,如r"C:\Users\mukun\Documents\datasets\stream_folder")。 - 路径字符串有效性不符合要求:报错明确指出流式读取的路径必须是非空字符串,且不支持传入路径列表。检查你是否不小心传入了列表类型的路径,或者路径字符串存在首尾空格、特殊字符导致被判定为无效。
- 目标目录访问权限/存在性问题:如果目标目录
C:/Users/mukun/Documents/datasets/stream_folder实际不存在,或者Spark进程没有读取该目录的权限,会导致路径被识别为无效,进而触发报错。 - PySpark版本适配问题:部分旧版本PySpark在Windows环境下处理本地文件流式读取时存在bug,若上述排查无效,可尝试升级PySpark到稳定版本后再测试。
内容的提问来源于stack exchange,提问作者Mukunthan Karthik
相关产品推荐
相关产品推荐

