#python #pyspark #apache-spark-sql
Вопрос:
У меня есть список кортежей с именами фреймов данных и путями к этому фрейму данных. Я хочу перебрать список, прочитать каждый кадр данных и присвоить ему его имя.
paths = [('table1', 's3://my_bucket/data/table1/'), ('table2', 's3://my_bucket/data/table2/')]
Как мне повторить это и создать каждый df с соответствующим именем таблицы? Приведенное ниже не работает, потому что он создает фрейм данных как «имя».
for x in paths:
name = x[0]
name = spark.read.parquet(x[1])
Ответ №1:
Есть способы сделать это, но они УРОДЛИВЫ и подвержены ошибкам.
Если бы это было возможно, я бы поместил ваши фреймы данных в словарь:
my_dataframes = {}
for x in paths:
my_dataframes[x[0]] = spark.read.parquet(x[1])
...
my_dataframes['table1']....
Но есть уродливый способ-НЕ ДЕЛАЙТЕ ЭТОГО, если вы ДЕЙСТВИТЕЛЬНО не знаете, что делаете
somefile.py
my_dataframes = {}
for x in paths:
my_dataframes[x[0]] = spark.read.parquet(x[1])
globals().update(my_dataframes)
another_file.py
from .somefile import table1, table2
table1....