【发布时间】: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 不允许这样做。铸造操作必须以美国/英国格式进行,而不是欧洲格式。
标签: python apache-spark pyspark apache-spark-sql pyspark-dataframes