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
SparkSession.createDataFrame
, utilisé sous le capot, nécessite un RDD
/list
de Row
/Tuple
/list
/* ou dict
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.