无法在 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|
+----------------+-------------+
我有如下 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|
+----------------+-------------+