Frage Erstellen Sie Spark DataFrame. Schema für type kann nicht abgeleitet werden: >


Könnte jemand mir helfen, dieses Problem zu lösen, das ich mit Funken DataFrame habe?

Wenn ich myFloatRDD.toDF () mache, erhalte ich einen Fehler:

TypeError: Kann kein Schema für den Typ ableiten: type 'float'

Ich verstehe nicht warum ...

Beispiel:

myFloatRdd = sc.parallelize([1.0,2.0,3.0])
df = myFloatRdd.toDF()

Vielen Dank


29
2017-09-23 14:13


Ursprung


Antworten:


SparkSession.createDataFrame, die unter der Haube verwendet wird, erfordert eine RDD / list von Row/tuple/list/dict* oder pandas.DataFrame, außer Schema mit DataType wird gestellt. Versuchen Sie etwas wie folgt:

myFloatRdd.map(lambda x: (x, )).toDF()

oder noch besser:

from pyspark.sql import Row

row = Row("val") # Or some other column name
myFloatRdd.map(row).toDF()

So erstellen Sie ein DataFrame aus einer Liste von Skalaren, die Sie verwenden müssen SparkSession.createDataFrame direkt und ein Schema ***:

from pyspark.sql.types import FloatType

df = spark.createDataFrame([1.0, 2.0, 3.0], FloatType())

df.show()

## +-----+
## |value|
## +-----+
## |  1.0|
## |  2.0|
## |  3.0|
## +-----+

aber für einen einfachen Bereich wäre es besser zu verwenden SparkSession.range:

from pyspark.sql.functions import col

spark.range(1, 4).select(col("id").cast("double"))

* Nicht länger unterstützt.

** Spark SQL bietet auch eine eingeschränkte Unterstützung für die Schema-Inferenz bei der Exponierung von Python-Objekten __dict__.

*** Nur in Spark 2.0 oder höher unterstützt.


62
2017-09-23 14:26