无法在 pyspark 中格式化双精度值

Unable to format double values in pyspark

我有如下 CSV 数据:

time_value,annual_salary
5/01/19 01:02:16,120.56
06/01/19 2:02:17,12800
7/01/19 03:02:18,123.00
08/01/19 4:02:19,123isdhad

我只想考虑 numeric values 以及 十进制 值。基本上,我想忽略最后一条记录,因为在 annual_salary 的情况下它是字母数字的,而我能够这样做。但是,当我尝试将其转换为正确的十进制值时,结果却不正确。下面是我的代码:

df = df.withColumn("annual_salary", regexp_replace(col("annual_salary"), "\.", ""))
df = df.filter(~col("annual_salary").rlike("[^0-9]"))
df.show(truncate=False)
df.withColumn("annual_salary", col("annual_salary").cast("double")).show(truncate=False) 

但它给我的记录如下:

这是不正确的。

Expected output:

annual_salary
120.56
12800.00
123.00

这里可能出了什么问题?我是否需要为此类转换实施 UDF?

请尝试转换十进制类型。

  df.where(~col('annual_salary').rlike('[A-Za-z]')).withColumn('annual_salary', col('annual_salary').cast(DecimalType(38,2))).show()

+----------------+-------------+
|      time_value|annual_salary|
+----------------+-------------+
|5/01/19 01:02:16|       120.56|
|06/01/19 2:02:17|     12800.00|
|7/01/19 03:02:18|       123.00|
+----------------+-------------+