从数据集读取ID列表实现多数据集合并的代码报错问题
问题解决方法
错误根源
你遇到的TypeError: 'method' object is not iterable(类型错误:方法对象不可迭代),直接原因是**collect是DataFrame的方法,你没有加括号调用它**。temp_df.select('ID').collect只是引用了这个方法本身,并没有执行它来获取数据列表,所以id_list是一个方法对象,无法被create_outputs里的for循环遍历。
另外,你读取ID列表数据集的方式也存在问题:直接把数据集RI(ri.foundry.main.dataset.abcdefg)用sc.parallelize转成RDD再建DataFrame是错误的,这相当于把RI字符串当成了数据内容,而非读取这个RI对应的真实数据集。
修正后的完整代码
from transforms.api import Input, Output, transform_df from pyspark.sql import SparkSession # 1. 正确读取存储ID的数据集 id_df = Input("ri.foundry.main.dataset.abcdefg").dataframe() # 提取ID列表:调用collect()获取Row对象列表,再提取每个Row中的ID字段 id_list = [row.ID for row in id_df.select('ID').collect()] # 2. 复用原有的多数据集合并逻辑 def create_outputs(dataset_ids): transforms = [] for id in dataset_ids: @transform_df( Output(output_path + "/appended_dataset"), input_path=Input(input_path + id + "/dataset"), ) def compute(input_path): return input_path transforms.append(compute) return transforms TRANSFORMS = create_outputs(id_list)
额外说明
- 在Foundry Transform环境中,无需手动创建
SparkContext或SQLContext,平台会自动提供可用的Spark会话。 - 请确保存储ID的数据集Schema正确,确实包含名为
ID的字符串类型字段。
内容的提问来源于stack exchange,提问作者Ontollectual
相关产品推荐
相关产品推荐

