В вашем коде есть две ошибки, сначала
, с этим утверждением -
new_schema = [StructField(e.split(' ')[0], e.split(' ')[1], e.split(' ')[2]) for e in config]
здесь вы должны получить доступ к части значения атрибута json schema
, как -
new_schema = [StructField(e.split(' ')[0], eval(e.split(' ')[1]),
e.split(' ')[2]) for e in config["schema"]]
Во-вторых, тип внутри StructField должен оцениваться как код, иначе вы просто создаете структурное поле с (строка, строка, строка) вместо (name, dataType, nullable)
, чтобы исправить для этого используйте функцию eval()
для e.split(' ')[1]
и конвертируйте e.split(' ')[1]
в логическое значение -
from pyspark.sql.types import *
new_schema = [StructField(e.split(' ')[0],
eval(e.split(' ')[1]),
bool(e.split(' ')[2])) for e in config["schema"]]