web-dev-qa-db-fra.com

Spark RDD à DataFrame python

J'essaie de convertir le RDD Spark en un DataFrame. J'ai vu la documentation et l'exemple où le schéma est passé à sqlContext.CreateDataFrame(rdd,schema) fonction. 

Mais j'ai 38 colonnes ou champs et cela augmentera encore. Si je donne manuellement le schéma en spécifiant chaque information de champ, ça va être un travail fastidieux.

Existe-t-il un autre moyen de spécifier le schéma sans connaître les informations des colonnes précédentes?.

21
Jack Daniel

Voir,

Il existe deux manières de convertir un RDD en DF dans Spark.

toDF() et createDataFrame(rdd, schema)

Je vais vous montrer comment vous pouvez le faire de manière dynamique.

toDF ()

La commande toDF() vous permet de convertir un RDD[Row] en une image. Le fait est que l'objet Row() peut recevoir un argument **kwargs. Donc, il existe un moyen facile de le faire.

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 cette façon, vous pourrez créer un cadre de données dynamiquement.

createDataFrame (rdd, schéma)

Une autre façon de faire est de créer un schéma dynamique. Comment?

Par ici:

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)

Cette deuxième façon est plus propre à faire cela ...

Voici comment vous pouvez créer des images de données de manière dynamique.

49
Thiago Baldim

Essayez si ça marche

sc = spark.sparkContext

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