TypeError: Invalid argument, not a string or column: <function <lambda> at 0x7f1f357c6160> of type <class 'function'>

TypeError: Invalid argument, not a string or column: <function <lambda> at 0x7f1f357c6160> of type <class 'function'>

我正在使用以下代码片段创建 Databricks 目录中所有 .csv 文件的列表。

csv_dir = '/my_dir/'
csv_paths = list(filter(lambda x: '.csv' in x, os.listdir(csv_dir)))

但是它会产生以下错误

TypeError: Invalid argument, not a string or column: <function <lambda> at 0x7f1f357c6160> of type <class 'function'>. For column literals, use 'lit', 'array', 'struct' or 'create_map' function.

我猜我的纯 Python 代码被误认为是 PySpark 代码。我尝试在单元格顶部使用 %python,它仍然产生相同的结果。

是的,我在笔记本中交替使用了 PySpark 和 Python,但我在使用 lambda 函数时从未遇到过这个问题。

是否有解决此问题的方法?

请指教

很可能如您所料,您的代码使用了 Pyspark's filter function instead of Python's built-in filter。导入 Pyspark 函数的最佳做法是使用别名,例如 import pyspark.sql.functions as F,这样这些函数就不会与具有相同名称的内置函数发生冲突。

但是,如果您已经导入了 from pyspark.sql.functions import *,您可以使用 __builtin__.filter

显式调用内置 filter
csv_paths = list(__builtin__.filter(lambda x: '.csv' in x, os.listdir(csv_dir)))