Spark RDD a DataFrame python

Estoy tratando de convertir el Spark RDD a un DataFrame. He visto la documentación y el ejemplo donde el esquema se pasa a la función sqlContext.CreateDataFrame(rdd,schema) .

Pero tengo 38 columnas o campos y esto boostá aún más. Si doy manualmente el esquema especificando la información de cada campo, será un trabajo muy tedioso.

¿Hay alguna otra manera de especificar el esquema sin conocer la información de las columnas anteriores?

Ver,

Hay dos formas de convertir un RDD a DF en Spark.

toDF() y createDataFrame(rdd, schema)

Te mostraré cómo puedes hacer eso dinámicamente.

toDF ()

El toDF() le ofrece la forma de convertir un RDD[Row] en un Dataframe. El punto es que el objeto Row() puede recibir un **kwargs argumento **kwargs . Por lo tanto, hay una manera fácil de hacer eso.

 from pyspark.sql.types import Row #here you are going to create a function def f(x): d = {} for i in range(len(x)): d[str(i)] = x[i] return d #Now populate that df = rdd.map(lambda x: Row(**f(x))).toDF() 

De esta manera podrás crear un dataframe dinámicamente.

createDataFrame (rdd, esquema)

Otra forma de hacerlo es crear un esquema dynamic. ¿Cómo?

De esta manera:

 from pyspark.sql.types import StructType from pyspark.sql.types import StructField from pyspark.sql.types import StringType schema = StructType([StructField(str(i), StringType(), True) for i in range(32)]) df = sqlContext.createDataFrame(rdd, schema) 

Esta segunda forma es más limpia para hacer eso …

Así es como puedes crear dinámicamente marcos de datos.

Probar si eso funciona

 sc = spark.sparkContext # Infer the schema, and register the DataFrame as a table. schemaPeople = spark.createDataFrame(RddName) schemaPeople.createOrReplaceTempView("RddName")