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



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

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

New_RDD = RawDataRDD.map(lambda (house_name, price): (house_name, float(x.price))    # this 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"))

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

根据文档,您可以在如下所示的列上使用 cast 函数:

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

答案应该如下:

>>> rawdata.printSchema()
root
 |-- house name: string (nullable = true)
 |-- price: string (nullable = true)
>>> rawdata=rawdata.withColumn('price',rawdata['price'].cast("float").alias('price'))
>>> rawdata.printSchema()
root
 |-- house name: string (nullable = true)
 |-- price: float (nullable = true)

因为它是最短的单行代码,不使用任何用户定义的函数。您可以使用printSchema()函数查看它是否正常工作。

相关内容

  • 没有找到相关文章

最新更新