it-swarm-eu.dev

Spark RDD to DataFrame python

Sto cercando di convertire Spark RDD in un DataFrame. Ho visto la documentazione e l'esempio in cui lo schema è passato alla funzione sqlContext.CreateDataFrame(rdd,schema)

Ma ho 38 colonne o campi e questo aumenterà ulteriormente. Se fornisco manualmente lo schema che specifica ogni informazione sul campo, sarà un lavoro tedioso.

C'è un altro modo per specificare lo schema senza conoscere le informazioni delle colonne precedenti.

21
Jack Daniel

Vedere,

Ci sono due modi per convertire un RDD in DF in Spark.

toDF() e createDataFrame(rdd, schema)

Ti mostrerò come puoi farlo dinamicamente.

todf ()

Il comando toDF() ti dà il modo di convertire un RDD[Row] in un Dataframe. Il punto è che l'oggetto Row() può ricevere un argomento **kwargs. Quindi, c'è un modo semplice per farlo.

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

In questo modo sarai in grado di creare un dataframe in modo dinamico.

createDataFrame (rdd, schema)

Un altro modo per farlo è creare uno schema dinamico. Come?

Per di qua:

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)

Questo secondo modo è più pulito per farlo ...

Ecco come è possibile creare i dataframes in modo dinamico.

49
Thiago Baldim

Prova se funziona

sc = spark.sparkContext

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