Azure Databricks执行MSCK REPAIR TABLE时排除表报错:list无filter属性
问题解决:AttributeError: 'list' object has no attribute 'filter'
错误原因很明确:spark.catalog.listTables(database)返回的是Python原生列表,而非Spark DataFrame。你调用的filter()是Spark DataFrame的专属方法,列表对象没有这个属性,所以触发报错。
下面是两种可行的修正方案:
方案1:用Python列表推导式过滤(推荐,更简洁高效)
database = "az_shffs" tables = spark.catalog.listTables(database) # 定义需要排除的表名集合 exclude_tables = {'exampletable1', 'exampletable2', 'exampletable3', 'exampletable4'} # 列表推导式筛选出不在排除列表中的表 filtered_tables = [table for table in tables if table.name not in exclude_tables] for table in filtered_tables: spark.sql(f"MSCK REPAIR TABLE {database}.{table.name}")
方案2:转成Spark DataFrame后过滤
如果习惯用Spark的DataFrame操作,可以先把列表转成DataFrame再过滤:
database = "az_shffs" tables = spark.catalog.listTables(database) # 将表列表转换为Spark DataFrame table_df = spark.createDataFrame(tables) # 过滤掉指定表(~表示取反,即不在列表中的表) filtered_table_df = table_df.filter(~table_df.tableName.isin(['exampletable1', 'exampletable2', 'exampletable3', 'exampletable4'])) # 遍历过滤后的表执行修复命令 for row in filtered_table_df.collect(): spark.sql(f"MSCK REPAIR TABLE {database}.{row.tableName}")
内容的提问来源于stack exchange,提问作者kryprojon
相关产品推荐
相关产品推荐

