web-dev-qa-db-ja.com

Spark DataFrameを作成します。タイプのスキーマを推測できません:<type 'float'>

誰かがSpark DataFrameでこの問題を解決するのを手伝ってもらえますか?

myFloatRDD.toDF()を実行すると、エラーが発生します。

TypeError:タイプのスキーマを推測できません:タイプ 'float'

理由がわかりません...

例:

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

ありがとう

42
Breach

SparkSession.createDataFrameは、内部で使用され、RDD/listRow/Tuple/list /が必要です。dict*またはpandas.DataFrameDataTypeのスキーマが提供されていない場合)。このようにフロートをタプルに変換してみてください:

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

またはさらに良い:

from pyspark.sql import Row

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

スカラーのリストからDataFrameを作成するには、SparkSession.createDataFrameを直接使用し、スキーマを提供する必要があります***:

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

ただし、単純な範囲の場合は、SparkSession.rangeを使用することをお勧めします。

from pyspark.sql.functions import col

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

*サポートされなくなりました。

** Spark SQLは、__dict__を公開するPythonオブジェクトのスキーマ推論の限定的なサポートも提供します。

*** Spark 2.0以降でのみサポートされています。

84
zero323