SparkSession.createDataFrame
, che viene utilizzato sotto il cofano, richiede un RDD
/list
di /tuple
/list
/dict
* o pandas.DataFrame
, a meno che non sia fornito lo schema con DataType
. Provare qualcosa di simile:
myFloatRdd.map(lambda x: (x,)).toDF()
o meglio ancora:
from pyspark.sql import Row
row = Row("val") # Or some other column name
myFloatRdd.map(row).toDF()
Per creare una DataFrame
da un elenco di scalari dovrete usare SparkSession.createDataFrame
direttamente e fornire uno 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|
## +-----+
ma per una gamma semplice sarebbe meglio usare SparkSession.range
:
from pyspark.sql.functions import col
spark.range(1, 4).select(col("id").cast("double"))
* Non più supportato.
** Spark SQL fornisce anche un supporto limitato per l'inferenza dello schema su oggetti Python che espongono __dict__
.
*** Supportato solo in Spark 2.0 o versioni successive.
Sono un novizio da accendere. puoi spiegare come funziona 'myFloatRdd.map (lambda x: (x,)). toDF()' risolvere questo problema? La 'map (lambda x: (x,))' converte semplicemente l'oggetto RDD in un elenco di righe? – kasa
@kasa C'è una mappatura di inferenza per 'tuples' (->' struct'), non esiste per gli scalari. – zero323