Функция Python 3 для l oop над pandas фреймом данных для изменения схемы - PullRequest
1 голос
/ 24 февраля 2020

Я конвертирую кучу pandas фреймов данных в spark df, затем записываю в hdfs. Также явное указание схемы для изменения всех типов данных в строку, чтобы избежать конфликта классов слияния.

Попытка написать функцию, которая будет l oop через все столбцы pandas df, создать схему, затем я смогу использовать схему для преобразования в 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)
                    ])

Любая помощь в написании этой функции будет полезна!

Спасибо!

1 Ответ

1 голос
/ 24 февраля 2020

Попробуйте:

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