Динамическое создание и присвоение имен Spark DFS

#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....