Вы можете использовать встроенную функцию pyspark _parse_datatype_string :
from pyspark.sql.types import _parse_datatype_string
df = spark.createDataFrame([
["col1,string"],
["col3,int"],
["col3,int"]
], ["schema"])
str_schema = ",".join(map(lambda c: c["schema"].replace(",", ":") , df.collect()))
# col1:string,col3:int,col3:int
final_schema = _parse_datatype_string(str_schema)
# StructType(List(StructField(col1,StringType,true),StructField(col3,IntegerType,true),StructField(col3,IntegerType,true)))
_parse_datatype_string
ожидает строку в формате DDL, то есть: col1:string, col2:int
, следовательно, сначала нам нужно заменить ,
с :
затем соедините все вместе через запятую. Функция вернет экземпляр StructType
, который будет вашей окончательной схемой.