2016-02-28 26 views
3

在PySpark 1.6 DataFrame中,當前沒有Spark內置函數將字符串轉換爲float/double。PySpark 1.6:DataFrame:將一個字段從字符串轉換爲float/double

假設我們有一個RDD('house_name','price'),兩個值都是字符串。你想轉換,價格從字符串浮動。 在PySpark中,我們可以應用map和python float函數來實現這一點。

New_RDD = RawDataRDD.map(lambda (house_name, price): (house_name, float(x.price)) #it works 

在PySpark 1.6數據幀,這是行不通的:

New_DF = rawdataDF.select('house name', float('price')) #did not work 

直到內置Pyspark功能可用,如何做到實現這種轉換與UDF? 我開發這個轉換UDF如下:

from pyspark.sql.functions import udf 

from pyspark.sql.types import StringType 

def string_to_float(x):return float(x) 

udfstring_to_float = udf(string_to_float, StringType()) 

rawdata.withColumn("house name",udfstring_to_float("price")) 

是否有更好和更簡單的方法來達到同樣的?

回答

2

按照documentation,您可以使用這樣的列cast功能:

rawdata.withColumn("house name",rawdata["price"].cast(DoubleType().alias("price")) 
+0

這不適合我@Jaco工作。 OP說他使用的是pyspark 1.6,而你鏈接的文檔是1.3。當我在1.6上試試這個時,我得到'AttributeError:'DoubleType'對象沒有屬性'alias' ' – Sother

+0

你有導入'from pyspark.sql.types import DoubleType'嗎?我確信在發佈之前我已經在PySpark 1.6上進行了測試。 – Jaco

+2

FIX:應該是 '''rawdata.withColumn(「房子名稱」,rawdata [「價格」]。cast(DoubleType())。別名(「價格」)''' –