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