读取火花中的百分比值



我有一个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()

最新更新