1. ホーム
  2. python

[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?

2022-07-17 20:33:34

質問

列がStringのデータフレームがあります。 PySparkでカラムの型をDouble型に変更したいと思いました。

以下は、私が行った方法です。

toDoublefunc = UserDefinedFunction(lambda x: x,DoubleType())
changedTypedf = joindf.withColumn("label",toDoublefunc(joindf['show']))

ロジスティック回帰を実行中にエラーが発生したので、これは正しい方法なのか知りたかったのです。 ロジスティック回帰を実行しているときに、いくつかのエラーが発生しましたので、私は疑問に思っています。 これがトラブルの原因なのでしょうか?

どのように解決するのですか?

ここでは、UDFは必要ありません。 Column はすでに cast メソッド DataType インスタンス :

from pyspark.sql.types import DoubleType

changedTypedf = joindf.withColumn("label", joindf["show"].cast(DoubleType()))

または短い文字列

changedTypedf = joindf.withColumn("label", joindf["show"].cast("double"))

ここで、正規の文字列名(他のバリエーションもサポート可能)は、以下のように対応します。 simpleString の値に対応します。だからアトム型には

from pyspark.sql import types 

for t in ['BinaryType', 'BooleanType', 'ByteType', 'DateType', 
          'DecimalType', 'DoubleType', 'FloatType', 'IntegerType', 
           'LongType', 'ShortType', 'StringType', 'TimestampType']:
    print(f"{t}: {getattr(types, t)().simpleString()}")

BinaryType: binary
BooleanType: boolean
ByteType: tinyint
DateType: date
DecimalType: decimal(10,0)
DoubleType: double
FloatType: float
IntegerType: int
LongType: bigint
ShortType: smallint
StringType: string
TimestampType: timestamp

また、例えば複合型の場合

types.ArrayType(types.IntegerType()).simpleString()   

'array<int>'

types.MapType(types.StringType(), types.IntegerType()).simpleString()

'map<string,int>'