web-dev-qa-db-fra.com

Create Spark DataFrame. Impossible d'inférer le schéma pour le type: <type 'float'>

Quelqu'un pourrait-il m'aider à résoudre ce problème que j'ai avec Spark DataFrame?

Quand je fais myFloatRDD.toDF() j'obtiens une erreur:

TypeError: impossible d'inférer le schéma pour le type: type 'float'

Je ne comprends pas pourquoi ...

Exemple:

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

Merci

42
Breach

SparkSession.createDataFrame, utilisé sous le capot, nécessite un RDD/list de Row/Tuple/list /dict* ou pandas.DataFrame, sauf si un schéma avec DataType est fourni. Essayez de convertir float en Tuple comme ceci:

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

ou même mieux:

from pyspark.sql import Row

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

Pour créer un DataFrame à partir d'une liste de scalaires, vous devez utiliser SparkSession.createDataFrame directement et fournit un schéma ***:

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|
## +-----+

mais pour une gamme simple, il serait préférable d'utiliser SparkSession.range:

from pyspark.sql.functions import col

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

* N'est plus pris en charge.

** Spark SQL fournit également une prise en charge limitée de l'inférence de schéma sur Python exposant __dict__.

*** Pris en charge uniquement dans Spark 2.0 ou version ultérieure.

84
zero323