Python 3.x Python3函数在数据帧上循环以更改模式

Python 3.x Python3函数在数据帧上循环以更改模式,python-3.x,pandas,pyspark,apache-spark-sql,Python 3.x,Pandas,Pyspark,Apache Spark Sql,我正在将一组pandas数据帧转换为spark df,然后写入hdfs。还显式指定模式以将所有数据类型更改为字符串,以避免合并类冲突 尝试编写一个将循环所有列的函数,创建模式,然后我可以使用该模式转换为spark 以下是我到目前为止的情况: def creating_schema(df): for columnName in df.columns: schema = StructType([(StructField('"' + columnName + '"' , Str

我正在将一组pandas数据帧转换为spark df,然后写入hdfs。还显式指定模式以将所有数据类型更改为字符串,以避免合并类冲突

尝试编写一个将循环所有列的函数,创建模式,然后我可以使用该模式转换为spark

以下是我到目前为止的情况:

def creating_schema(df):
    for columnName in df.columns:
        schema = StructType([(StructField('"' + columnName + '"' , StringType(), True))])
        print(schema)

    return(schema)
这将产生:

StructType(List(StructField("column_1",StringType,true)))
StructType(List(StructField("column_2",StringType,true)))
StructType(List(StructField("column_3",StringType,true)))
StructType(List(StructField("column_4",StringType,true)))
StructType(List(StructField("column_5",StringType,true)))
但是,我相信我需要这种格式的东西才能工作:

schema = StructType([StructField("column_1" , StringType(), True),
                    StructField("column_2" , StringType(), True),
                    StructField("column_3" , StringType(), True),
                    StructField("column_4" , StringType(), True),
                    StructField("column_5" , StringType(), True)
                    ])
编写此函数的任何帮助都会很有帮助

谢谢

试试看:

def creating_schema(df):
    sf = []
    for columnName in df.columns:
        sf.append(StructField(columnName, StringType(), True))
    return StructType(sf)
证明:

pdf = pd.DataFrame(columns=["column_1","column_2","column_3","column_4","column_5"])
schema=creating_schema(pdf)
sdf = sqlContext.createDataFrame(sc.emptyRDD(), schema)
sdf.printSchema()
root
 |-- column_1: string (nullable = true)
 |-- column_2: string (nullable = true)
 |-- column_3: string (nullable = true)
 |-- column_4: string (nullable = true)
 |-- column_5: string (nullable = true)

您可以考虑将
StructField(““'+columnName+”,StringType(),True)
更改为
StructField(columnName,StringType(),True)
。我认为引用字符串是没有必要的。