PySpark 1.6:DataFrame:将一列从字符串转换为浮点/双精度

在PySpark 1.6 DataFrame中,当前没有Spark内置函数可以将字符串转换为float / double.

假设我们有一个带有(‘house_name’,’price’)的RDD,两个值都作为字符串.您想将价格从字符串转换为浮动.
在PySpark中,我们可以应用map和python float函数来实现这一点.

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

在PySpark 1.6 Dataframe中,它不起作用:

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") )

有没有更好,更简单的方法来实现这一目标?

解决方法:

根据documentation,您可以在像这样的列上使用强制转换功能:

rawdata.withColumn("house name",rawdata["price"].cast(DoubleType().alias("price"))
上一篇:python-集群上的pyspark,确保使用了所有节点


下一篇:python-read_csv()中的S3阅读器是先将文件下载到磁盘还是使用流式传输?