2015-08-29 66 views
25

我有一個以String形式的列的數據框。 我想在pyspark中將列類型更改爲Double類型。如何將字符串類型中的Dataframe列更改爲pyspark中的Double類型

以下是這樣的,我做到了, -

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

只是想知道,這是做了正確的方式,同時通過Logistic迴歸運行 ,我得到了一些錯誤,所以我不知道, 是這個麻煩的原因。

回答

47

沒有必要在這裏的UDF。 Column已經提供cast methodDataType例如:

from pyspark.sql.types import DoubleType 

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

或短字符串:

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

解決方案很簡單 -

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

保留列的名稱,並使用相同的名稱輸入列避免額外的列相加:

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

謝謝,我一直在尋找如何留住原來的列名 – javadba

+0

有一個清單某處的短字符串數據類型的Spark將確定? – alfredox

0

給出的答案足以解決問題,但我想分享另一種可能引入新版本的方法o f Spark (我不確定)所以給出的答案沒有抓住它。

我們可以col("colum_name")關鍵字達到火花聲明欄:

from pyspark.sql.functions import col , column 
changedTypedf = joindf.withColumn("show", col("show".cast("double")) 
+0

我收到一條錯誤消息: 'str'對象沒有屬性'cast' – Jie

相關問題