web-dev-qa-db-de.com

Sichern Sie RDD für DataFrame-Python

Ich versuche, die Spark-RDD in einen DataFrame umzuwandeln. Ich habe die Dokumentation und das Beispiel gesehen, in dem das Schema an die Funktion ____sqlContext.CreateDataFrame(rdd,schema) übergeben wird. 

Ich habe aber 38 Spalten oder Felder, und dies wird noch weiter zunehmen. Wenn ich das Schema manuell mit Angabe der Feldinformationen gebe, wird dies eine so langweilige Aufgabe.

Gibt es eine andere Möglichkeit, das Schema anzugeben, ohne die Informationen der Spalten vorher zu kennen.

21
Jack Daniel

Sehen,

Es gibt zwei Möglichkeiten, eine RDD in DF in Spark umzuwandeln.

toDF() und createDataFrame(rdd, schema)

Ich zeige Ihnen, wie Sie das dynamisch tun können.

toDF ()

Mit dem Befehl toDF() können Sie einen RDD[Row] in einen Dataframe konvertieren. Der Punkt ist, dass das Objekt Row() ein **kwargs-Argument erhalten kann. Es gibt also einen einfachen Weg, dies zu tun.

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

Auf diese Weise können Sie einen Datenrahmen dynamisch erstellen.

createDataFrame (Rdd, Schema)

Eine andere Möglichkeit besteht darin, ein dynamisches Schema zu erstellen. Wie?

Diesen Weg:

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)

Dieser zweite Weg ist sauberer, um das zu tun ...

So können Sie Dataframes dynamisch erstellen.

49
Thiago Baldim

Versuchen Sie, ob das funktioniert

sc = spark.sparkContext

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