web-dev-qa-db-ja.com

PySpark:列の絶対値。 TypeError:フロートが必要です

次のように作成されたデータフレームdfがあります。

schema = StructType([StructField('Id', StringType(), False),
                     StructField('Value', FloatType(), False)])  
df = spark.createDataFrame([('a',5.0),('b',1.0),('c',-0.3)],schema)

のように見えます

+---+-----+
| Id|Value|
+---+-----+
|  a|  5.0|
|  b|  1.0|
|  c| -0.3|
+---+-----+

ここで、「Value」の絶対値を取得したいと思います。

+---+-----+
| Id|Value|
+---+-----+
|  a|  5.0|
|  b|  1.0|
|  c|  0.3|
+---+-----+

私はもう試した

df = df.withColumn('Value',math.fabs(df.Value))

しかし、文句を言いますTypeError:floatが必要です。ただし、Value列はFloatType()で指定されました。

これを正しく行う方法についての手がかりはありますか?ありがとう!

5
Yuehan Lyu

ネイティブのSpark関数abs()を使用できます。

from  pyspark.sql.functions import abs

df1 = df.withColumn('Value',abs(df.Value))
df1.show()
+---+-----+
| Id|Value|
+---+-----+
|  a|  5.0|
|  b|  1.0|
|  c|  0.3|
+---+-----+
19
mtoto