Databricks中Python lambda筛选文件被误识别为PySpark报错如何解决?
报错原因
你遇到的报错是Python内置的filter函数被PySpark的同名函数覆盖导致的。PySpark的pyspark.sql.functions.filter是用于操作Spark列对象的方法,不接受lambda作为入参,和Python内置的filter功能完全不同。你之前混用代码没遇到问题,是因为之前没有把PySpark的filter导入到当前命名空间覆盖内置函数。
解决方案
方案1:改用列表推导式(最推荐,无命名冲突风险,可读性更高)
完全避开filter函数的冲突,直接用原生Python语法实现相同逻辑:import os csv_dir = '/my_dir/' # 如果是DBFS路径需要加/dbfs前缀,改成 csv_dir = '/dbfs/my_dir/' csv_paths = [x for x in os.listdir(csv_dir) if '.csv' in x]方案2:显式调用Python内置filter
强制指定调用内置的filter,不受覆盖的PySpark函数影响:csv_paths = list(__builtins__.filter(lambda x: '.csv' in x, os.listdir(csv_dir)))方案3:清理命名空间冲突
检查当前Notebook之前的代码,避免使用from pyspark.sql.functions import *的全量导入方式,建议给PySpark函数库指定别名使用:# 规范导入方式,不会污染内置函数命名空间 import pyspark.sql.functions as F # 后续使用PySpark函数时加F.前缀,比如F.filter(col("xxx"))
内容的提问来源于stack exchange,提问作者The Singularity
相关产品推荐
相关产品推荐

