Pyspark 处理编号用逗号转为十进制

Pyspark handling number with comma to decimal

我有以下列需要转换成小数。当前 ent_Rentabiliteit_ent_rentabiliteit 列是一个字符串,我需要转换为具有 returns 相同值的数据类型。所以在转换后必须显示 -0.7-1.2 等值。

我当前的代码目前看起来像:

from pyspark.sql import functions as F

df2test = df2.withColumn(
    "ent_Rentabiliteit_ent_rentabiliteit ",
    F.regexp_replace("ent_Rentabiliteit_ent_rentabiliteit ", ".", ".").cast(
        DecimalType()
    ),
)

有什么建议吗?非常感谢

您可以 castDecimalType 的列。

示例:

spark = SparkSession.builder.getOrCreate()

data = [
    {
        "ent_Rentabiliteit_ent_rentabiliteit": "1.23",
    },
    {
        "ent_Rentabiliteit_ent_rentabiliteit": "-2.33",
    },
]
df = spark.createDataFrame(data)
df = df.withColumn(
    "new_col", F.col("ent_Rentabiliteit_ent_rentabiliteit").cast(DecimalType(10, 4))
)

结果:

+-----------------------------------+-------+                                   
|ent_Rentabiliteit_ent_rentabiliteit|new_col|
+-----------------------------------+-------+
|                               1.23| 1.2300|
|                              -2.33|-2.3300|
+-----------------------------------+-------+

架构:

root
 |-- ent_Rentabiliteit_ent_rentabiliteit: string (nullable = true)
 |-- new_col: decimal(10,4) (nullable = true)

请记住 DecimalType 必须有固定的精度。创建 DecimalType 时,默认精度和小数位数为 (10, 0)。从 decimal.Decimal 对象推断模式时,它将是 DecimalType(38, 18).

请在此处详细了解精度:DecimalType