Azure Databricks中PySpark循环读取CSV后无法按名称访问DataFrame
循环创建Spark DataFrame后无法外部访问的解决方案
你的代码问题在于:循环中仅将CSV文件读入临时变量df_spark,并未把创建好的DataFrame绑定到athletes、coaches这类目标变量名上。每次循环都会覆盖df_spark的值,循环结束后只有最后一个DataFrame的内容保留在df_spark中,而athletes等变量从未被定义,因此调用时会报错。
解决方法1:绑定到全局变量
通过Python的globals()字典,直接将DataFrame赋值到对应名称的全局变量:
for df_name in ['athletes', 'coaches','entriesgender','medals','teams']: globals()[df_name] = spark.read.csv(f'/mnt/data/raw-data/{df_name}.csv', header=True) globals()[df_name].show() # 现在可以直接访问目标DataFrame athletes.show(n=5)
解决方法2:用字典存储(更推荐)
如果不想污染全局命名空间,建议将所有DataFrame存入字典,通过键名访问:
df_collection = {} for df_name in ['athletes', 'coaches','entriesgender','medals','teams']: df_collection[df_name] = spark.read.csv(f'/mnt/data/raw-data/{df_name}.csv', header=True) df_collection[df_name].show() # 通过字典键访问指定DataFrame df_collection['athletes'].show(n=5)
原代码失效原因说明
原循环中的df_spark只是遍历字符串列表的临时变量,随后被重新赋值为Spark DataFrame——这个操作和字符串对应的变量名(如athletes)没有任何关联,相当于只是借用了字符串的文本作为临时变量名,并未真正创建名为athletes的变量。
内容的提问来源于stack exchange,提问作者Dipyaman
相关产品推荐
相关产品推荐

