在pyspark中将字符串价格值转换为double类型

Posted

技术标签:

【中文标题】在pyspark中将字符串价格值转换为double类型【英文标题】:Convert string price value to double type in pyspark 【发布时间】:2020-02-03 08:59:20 【问题描述】:

我需要将价格值转换为德国数字格式。但是,我在 pyspark 中使用了regexp_replace 函数并处理了更改方式。但是,它返回的输出类型是 StringType,我们必须将其转换为 DoubleType。执行转换时,输出值将更新为 null

示例数据框输入:

|price_num|
|3,104.15 |
|4,534.56 |

我正在使用数据框选择来创建一个新列:

regexp_replace(regexp_replace(regexp_replace(format_number( -1 * col('price_num').cast('double'), 2), '\\.', '@'), ',', '\\.'), '@', ',').alias(german_format)

我需要将值转换为 doubleType..请建议任何转换方式,而不是填充空值。

没有强制转换的输出:

price_num|german_format
string   |string
3,104.15 |-3.104,15
4,534.56 |-4.534,56

我在投射时的输出:

price_num|german_format
string   |double
3,104.15 |null
4,534.56 |null   #Invalid values

预期输出:

price_num|german_format
string   |double
3,104.15 |-3.104,15
4,534.56 |-4.534,56

【问题讨论】:

好吧,当string 是德语格式时,您不能转换为double。 PySpark 不允许这样做。铸造操作必须以美国/英国格式进行,而不是欧洲格式。 ***.com/questions/52702608/… 【参考方案1】:

首先,您必须从价格的欧洲字符串数字格式中删除点,并将逗号替换为点。然后你可以将它转换为 double 类型。

试试这个:

df = spark.createDataFrame([("-3.104,15",), ("-3.104,15",)], ['price_european_format'])

df.withColumn("price_double", regexp_replace(regexp_replace(
    col("price_european_format"), '\\.', ''), ',', '\\.').cast("double"))\
  .show()

给予:

+---------------------+------------+
|price_european_format|price_double|
+---------------------+------------+
|            -3.104,15|    -3104.15|
|            -3.104,15|    -3104.15|
+---------------------+------------+

【讨论】:

以上是关于在pyspark中将字符串价格值转换为double类型的主要内容,如果未能解决你的问题,请参考以下文章

在 PySpark 中将 URI 查询字符串转换为结构键值数组

如何在pyspark中将JSON字符串转换为JSON对象

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

在 C++ 中将 Double 转换为字符串的问题

如何在pyspark中将字符串列转换为ArrayType

pyspark 在循环中将数组转换为字符串