我有一个xlsx文件,它只有一列;
percentage
30%
40%
50%
-10%
0.00%
0%
0.10%
110%
99.99%
99.98%
-99.99%
-99.98%
当我使用Apache Spark读到这篇文章时,我得到的是
|percentage|
+----------+
| 0.3|
| 0.4|
| 0.5|
| -0.1|
| 0.0|
| 0.0|
| 0.001|
| 1.1|
| 0.9999|
| 0.9998|
+----------+
预期输出为
+----------+
|percentage|
+----------+
| 30%|
| 40%|
| 50%|
| -10%|
| 0.00%|
| 0%|
| 0.10%|
| 110%|
| 99.99%|
| 99.98%|
+----------+
我的代码-
val spark = SparkSession
.builder
.appName("trimTest")
.master("local[*]")
.getOrCreate()
val df = spark.read
.format("com.crealytics.spark.excel").
option("header", "true").
option("maxRowsInMemory", 1000).
option("inferSchema", "true").
load("data/percentage.xlsx")
df.printSchema()
df.show(10)
我不想使用强制转换或将inferschema转换为false,我想要一种将百分比值读取为百分比的方法,而不是双精度或字符串。
好吧,百分比是两倍:30% = 0.3
唯一的区别是它的显示方式,正如@Artem_Aliev在评论中所写,火花中没有百分比类型可以像你预期的那样打印出来。但再一次:百分比是两倍,相同的东西,不同的符号。
问题是,你想如何处理这些百分比?
- 到";应用";他们在其他方面,即使用乘法,然后只使用双类型列
- 要获得漂亮的打印效果,请在打印前转换为合适的字符串:
val percentString = format_string("%.2f%%", $"percentage" * 100)
ds.withColumn("percentage", percentString).show()