0

我有一个 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,我想要一种将百分比值读取为百分比而不是双精度值或字符串的方法。

4

1 回答 1

0

好吧,百分比是两倍:30% = 0.3

唯一的区别是它的显示方式,正如@Artem_Aliev 在评论中所写,spark 中没有百分比类型可以按您的预期打印出来。但再一次:百分比是两倍,同样的事情,不同的符号。

问题是,你想用这些百分比做什么?

  • 将它们“应用”到其他东西上,即使用乘法,然后只使用双类型列
  • 要获得漂亮的打印效果,请在打印前转换为合适的字符串:
val percentString = format_string("%.2f%%", $"percentage" * 100)
ds.withColumn("percentage", percentString).show()
于 2021-12-01T15:15:13.883 回答