You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks中使用isin()过滤DataFrame报AttributeError问题求助

问题排查与解决

错误原因

你遇到的AttributeError: 'DataFrame' object has no attribute '_get_object_id',本质是因为collect()返回的是Row对象的列表(比如[Row(Value='CODE1'), Row(Value='CODE2')]),而isin()方法需要的是纯基础类型的集合(字符串、数字等)。直接将Row列表传入isin()会导致Spark内部无法正确解析对象类型,从而抛出该错误。

解决方案

方法1:提取Row中的纯值列表(小数据量场景)

将collect()得到的Row列表转换为纯值数组,再传入isin():

# 提取Row中的Value字段,转为纯值列表
dist_eventCodes = [row['Value'] for row in Event_code.select('Value').distinct().collect()]
# 执行过滤
filtered_ADT_df = ADT_df.filter(ADT_df.eventTypeCode.isin(dist_eventCodes))

方法2:使用半连接(大数据量推荐)

如果数据量较大,collect()会将数据拉取到Driver节点,可能引发内存问题。推荐使用Spark的半连接(Semi Join),直接在集群端完成过滤,性能更优:

# 重命名列,和ADT_df的eventTypeCode匹配
event_codes_df = Event_code.select('Value').distinct().withColumnRenamed('Value', 'eventTypeCode')
# 半连接:只保留ADT_df中存在于event_codes_df的记录
filtered_ADT_df = ADT_df.join(event_codes_df, on='eventTypeCode', how='semi')

半连接的优势是不会引入重复数据,也无需将数据集拉到Driver端,适合大规模数据处理场景。

内容的提问来源于stack exchange,提问作者Darkmaster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 01:55:33