小编Soh*_*han的帖子

如何在 PySpark 1.6 中将 DataFrame 列从字符串转换为浮点/双精度?

在 PySpark 1.6 DataFrame 中,目前没有 Spark 内置函数可以将字符串转换为浮点数/双精度数。

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

New_RDD = RawDataRDD.map(lambda (house_name, price): (house_name, float(x.price))    # this works
Run Code Online (Sandbox Code Playgroud)

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

New_DF = rawdataDF.select('house name', float('price')) # did not work
Run Code Online (Sandbox Code Playgroud)

在内置 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"))
Run Code Online (Sandbox Code Playgroud)

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

python type-conversion apache-spark-sql pyspark

5
推荐指数
1
解决办法
3万
查看次数