在pyspark中将字符串价格值转换为双精度类型
Convert string price value to double type in pyspark
我需要将价格值转换为德国数字格式。但是,我在 pyspark 中使用了 regexp_replace
函数并处理了更改的方式。但是,它返回的输出类型是 StringType,我们必须将其转换为 DoubleType。执行转换时,输出值更新为 null values
示例数据帧输入:
|price_num|
|3,104.15 |
|4,534.56 |
我正在使用数据框 select 创建一个新列:
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
首先,您必须从价格的欧洲字符串数字格式中删除点,并将逗号替换为点。然后你可以把它转换成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 中使用了 regexp_replace
函数并处理了更改的方式。但是,它返回的输出类型是 StringType,我们必须将其转换为 DoubleType。执行转换时,输出值更新为 null values
示例数据帧输入:
|price_num|
|3,104.15 |
|4,534.56 |
我正在使用数据框 select 创建一个新列:
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
首先,您必须从价格的欧洲字符串数字格式中删除点,并将逗号替换为点。然后你可以把它转换成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|
+---------------------+------------+