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?.
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.
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.
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.
Essayez si ça marche
sc = spark.sparkContext
# Infer the schema, and register the DataFrame as a table.
schemaPeople = spark.createDataFrame(RddName)
schemaPeople.createOrReplaceTempView("RddName")